我在游戏中有一个级别场景,我在其中选择关卡。在这个场景中,我正在显示在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更好的传递值的方法。但是我无法这样做。有人能纠正我吗?
由于
答案 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