2012-02-02 42 views
0

在我的我已经定义了一个CCLayer这样的:定义在.h文件中一个cclayer

@interface MyLayer : CCLayer { 
    CCLayer * referenceLayer; 
} 

我应该如何宣布它在+(CCScene *)场景中使用它?

是否这样?

@property (nonatomic, retain) CCLayer *referenceLayer; 
+0

倾向于重写代码,以便您可以在 - (id)init方法中执行此操作。 – LearnCocos2D 2012-02-02 18:26:31

+0

@ LearnCocos2D:抱歉,我没有明白你的意思;我想要实现的是从另一层获得一些精灵...你知道任何可能性,而不是'CCSprite * sprite =(CCSprite *)[referenceLayer getChildByTag:kTagNumber];'? – 2012-02-02 22:12:18

回答

0

由于+ (id)scene是一个类的方法,你不能从内部访问它伊娃/属性。一个可能的解决方案是有一个静态变量在layer.m文件,像下面的代码片段:

static CCScene* _scene = nil; 

+ (id)scene { 
    if (_scene == nil) { 
     _scene = [[CCScene node] retain]; 
     //-- further scene initializaion 
    } 
    return _scene; 
} 

这种简单的方法有一个缺点:你只能有一个周围这样的层。

+0

[这个例子](http://stackoverflow.com/questions/9076699/accessing-an-object-from-class-type-method-in-iphone-cocos2d)? – 2012-02-02 18:16:27

+0

它也可以工作,你只需要定义:'+(id)scene:(CCLayer *)l'而不是'+(id)scene'。在这种情况下,您需要事先'alloc-init'图层,'scene'不能用作工厂方法。 – sergio 2012-02-03 16:54:50

+0

你能更新你的答案吗?其实我试图将'bLayer'作为孩子添加到'referenceLayer';你认为这是可能的吗? – 2012-02-03 16:59:27

相关问题