2013-03-19 1 views

ответ

0

Вы можете использовать макрос, уже определенный в cocos2d-x.

#define CC_SYNTHESIZE_RETAIN(varType, varName, funName) \ 
private: varType varName; \ 
public: virtual varType get##funName(void) const { return varName; } \ 
public: virtual void set##funName(varType var) \ 
{ \ 
    if (varName != var) \ 
    { \ 
     CC_SAFE_RETAIN(var); \ 
     CC_SAFE_RELEASE(varName); \ 
     varName = var; \ 
    } \ 
} 

#define CC_SAFE_DELETE(p)   do { if(p) { delete (p); (p) = 0; } } while(0) 
#define CC_SAFE_RELEASE(p)   do { if(p) { (p)->release(); } } while(0) 
#define CC_SAFE_RETAIN(p)   do { if(p) { (p)->retain(); } } while(0) 

Например:

CC_SYNTHESIZE_RETAIN(CCLayer*, m_layer, Layer); 

Затем вы можете назначить m_layer с setLayer(new_layer);, и получить его с getLayer().

И этот макрос работает только для расширения объекта CCObject.

+1

Не могли бы вы объяснить это вкратце некоторым примером или чем-то, как мы это используем в cocos2d-x. –