将变量从一个场景传递给另一个场景 - Cocos2D

时间:2011-04-14 05:49:04

标签: cocos2d-iphone

我在游戏中有一个级别场景,我在其中选择关卡。在这个场景中,我正在显示在CCLabelTTF中选择的级别。现在我想将此标签上显示的值传递给我的主场景。我这样做如下:

HelloWorld *hello=[HelloWorld getInstance];  //HelloWorld is main scene  

hello.strLevel=[lblLevel string];  //strLevel is NSString to which I am passing the label text  

[[CCDirector sharedDirector]replaceScene:[HelloWorld node]];  

在我的HelloWorld场景中,我使用单例来共享Level场景中使用的标签值。

//HelloWorld.h  


@interface HelloWorld : CCColorLayer  

{  

NSString *strLevel;  

}  

@property(nonAtomic,retain)NSString *strLevel;  

+(HelloWorld*)getInstance;  

HelloWorld.mm  

@implementation HelloWorld  

@synthesize strLevel;  

static HelloWorld *instance=nil;  

__________________________  

//Some code  

__________________________  


+(HelloWorld*)getInstance  

{  

if(instance==nil)  

{  

instance=[HelloWorld new];  

} 

return instance;  

}  

然而这不起作用。一旦控制到达

instance=[HelloWorld new];  

调用init()。那么为何不。但是,当控件返回到我传递值的行的Level场景时,没有任何反应,HelloWorld显示strLevel的值null。

我知道单身是比AppDelegate更好的传递值的方法。但是我无法这样做。有人能纠正我吗?

由于

1 个答案:

答案 0 :(得分:2)

使用单身人士。 What should my Objective-C singleton look like?这是对obj-c中单身人士的一个很好的讨论。祝你好运

[编辑]

 HelloWorld *hello=[HelloWorld getInstance]; //HelloWorld is main scene  
 hello.strLevel=[lblLevel string]; //strLevel is NSString to which I am passing the label text
 [[CCDirector sharedDirector]replaceScene:[HelloWorld node]];

您传递给replaceScene的HelloWorld实例与以下内容不同 你传递单例实例的HelloWorld *你好。这就是为什么它没有strLevel值。 strLevel值放在HelloWorld单例中。试试

NSLog(@"%@",[[HelloWorld getInstance] strLevel]); //somewhere in the code