如何在cocos2d场景之间传递参数

时间:2014-03-03 09:06:42

标签: cocos2d-iphone parameter-passing scene

我正在使用

[[CCDirector sharedDirector] replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5f scene:[CCBReader sceneWithNodeGraphFromFile:@"SongLoadingScene.ccbi"] ]];

逐个场景过渡。如何将参数传递给场景。

4 个答案:

答案 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)

我认为你不能将参数传递给场景。但是,您可以尝试以下任一方法来解决您的问题。

  1. 使用另一个类,一个单例,并将参数的值存储在单例的变量中。您可以在主场景中读取该变量。

  2. 将值保存在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