如何在cocos2d中推送场景并传递参数

时间:2012-07-20 13:03:42

标签: iphone ios cocos2d-iphone cclayer

我想知道是否有办法在cocos2d 2.0中推送一个场景并将一些参数传递给这个推送的场景,例如,我知道要推动一个场景我使用这个:

[[CCDirector sharedDirector] pushScene:[HelloWorldLayer scene]];

这推动了helloworldlayer,这是一个简单的层:

// HelloWorldLayer
@interface HelloWorldLayer : CCLayer
{
}

// returns a CCScene that contains the HelloWorldLayer as the only child
+(CCScene *) scene;

@end

但我希望传递给这一层一些参数,所以当推送图层时我可以使用我传递的参数。

我怎么做?

4 个答案:

答案 0 :(得分:5)

您可以执行+(CCScene *) sceneWithParameter:(ParameterType)parameter;而不是+(CCScene *) scene;

之类的操作

答案 1 :(得分:4)

首先,你必须使用像

这样的参数创建一个方法来调用

<强> HelloWorldLayer.h

@interface HelloWorldLayer : CCLayer
{
}
+(CCScene *)sceneWithParam:(id)parameter;

@end

<强> HelloWorldLayer.m

@implementation HelloWorldLayer

+(CCScene *)sceneWithParam:(id)parameter
{
    [[parameter retain]doSomething];
    CCScene * scene = [CCScene node];
    HelloWorldLayer *layer = [HelloWorldLayer node];
    [scene addChild: layer];
    return scene;
}

-(id) init
{
    if(self = [super init])
    {

    }
    return [super init];
}

// All your methods goes here as usual

@end

然后通过调用

来推送它
[[CCDirector sharedDirector] pushScene:[HelloWorldLayer sceneWithParam:obj]];

现在这可能还不够,如果您需要图层中的参数,则需要对图层执行相同的操作。使用该方法创建initmethod,然后将其进一步传递给sceneWithParam:方法中的图层。

答案 2 :(得分:0)

通过全局变量或外部对象(可从“推送器”和HelloWorldLayer访问)。甚至可以通过userData的{​​{1}}属性传递参数。

答案 3 :(得分:0)

Johnathan和Kreiri的答案运作良好,但你也不能只为你推动的场景添加属性并设置它们吗?所以代码看起来像这样(在浏览器中键入,你可能需要调整):

HelloLayer *hello = [HelloLayer scene];
hello.param1 = someValue;
hello.param2 = someOtherValue;
hello.param3 = yetAnotherValue;
[[CCDirector sharedDirector] pushScene: hello];

当然,在HelloLayer.h中,您可以定义类似的内容:

@property (strong, nonatomic) NSString *param1;
@property (readwrite) BOOL *param2;
@property (strong, nonatomic) NSNumber *param3;