2012-02-02 3 views
0

В моих я определил CCLayer так:определить cclayer в файле .h

@interface MyLayer : CCLayer { 
    CCLayer * referenceLayer; 
} 

Как я должен объявить его, чтобы использовать его в + (CCScene *) сцены?

Нравится?

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

Предпочитаете переписать код, чтобы вы могли выполнить его в методе init(). – LearnCocos2D

+0

@ LearnCocos2D: Извините, но я не понял, что вы имеете в виду; Я пытаюсь получить некоторые спрайты с другого уровня ... Знаете ли вы какую-либо возможность, а не 'CCSprite * sprite = (CCSprite *) [referenceLayer getChildByTag: kTagNumber];'? –

ответ

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)? –

+0

он также будет работать, вам нужно будет только определить: '+ (id) scene: (CCLayer *) l' вместо' + (id) scene'. В этом случае вам нужно будет «alloc-init» слой заранее, а «сцена» не может действовать как заводский метод. – sergio

+0

Можете ли вы уточнить свой ответ? На самом деле я пытаюсь добавить «bLayer» в качестве дочернего элемента в «referenceLayer»; вы думаете, что это возможно? –

Смежные вопросы