我想知道是否有办法在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
但我希望传递给这一层一些参数,所以当推送图层时我可以使用我传递的参数。
我怎么做?
答案 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;