我正在使用
[[CCDirector sharedDirector] replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5f scene:[CCBReader sceneWithNodeGraphFromFile:@"SongLoadingScene.ccbi"] ]];
逐个场景过渡。如何将参数传递给场景。
答案 0 :(得分:2)
CCBReader返回一个CCScene,其中包含您作为唯一子项传递的任何内容,因此您可以在CustomScene上创建一个构造函数,如下所示:
@interface CustomScene ()
@property (nonatomic, strong) id customParameter;
@end
@implementation CustomScene
+ (CCScene *)sceneWithCustomParameter:(id)customParameter
{
CCScene *customSceneParent = [CCBReader loadAsScene:NSStringFromClass([CustomScene class])];
CustomScene *customScene = [customSceneParent.children firstObject];
customScene.customParameter = customParameter;
return customSceneParent;
}
@end
这适用于任何自定义CCNode(例如CCSprite)
答案 1 :(得分:1)
我认为你不能将参数传递给场景。但是,您可以尝试以下任一方法来解决您的问题。
使用另一个类,一个单例,并将参数的值存储在单例的变量中。您可以在主场景中读取该变量。
将值保存在NSUserDefaults中并在场景中读取。
答案 2 :(得分:1)
CCBReader
的{{1}}只是一个返回sceneWithNodeGraphFromFile
新实例的类方法。
所以,如果你想传递一个整数,首先要修改CCBReader
来接收它,比如
sceneWithNodeGraphFromFile
然后修改+(CCScene*)sceneWithNodeGraphFromFile:(NSString*)file andInteger:(int)integer;
的构造函数以接收它。如果目前看起来像
CCBReader
你有
-(id)initWithFile:(NSString*)file;
最后修改-(id)initWithFile:(NSString*)file andInteger:(int)integer;
以将整数传递给这个新构造函数。
答案 3 :(得分:1)
秘密在于:
[CCBReader loadAsScene:@"YourCustomCCBFile"]
它会创建一个CCScene并将您的自定义文件添加为其子项。 如果要访问自定义对象,可以这样做:
CCScene *scene = [CCBReader loadAsScene:@"YourCustomCCBFile"];
CustomClass *customObject = [[scene children] firstObject];
customObject.property = @"hi";
[[CCDirector sharedDirector] replaceScene:scene];
请记住,如果你以这种方式设置一些属性,它将无法在
中使用- (void)didLoadFromCCB
改为使用:
- (void)onEnter