4

我想知道是否有办法在 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

4 回答 4

5

你可以做类似的事情+(CCScene *) sceneWithParameter:(ParameterType)parameter;而不是+(CCScene *) scene;

于 2012-07-20T13:30:47.593 回答
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:方法中的图层。

于 2012-07-20T14:00:06.560 回答
0

通过全局变量或外部对象(可从“推送器”和. 访问。HelloWorldLayer甚至您可以通过userData.HelloWorldLayer

于 2012-07-20T13:19:20.763 回答
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;
于 2014-03-06T18:54:05.920 回答