CCLayer初始化时,一般有三个步骤:
1.在继承CCLayer的子类里实现bool init();方法。
2.在继承CCLayer的子类里声明宏LAYER_NODE_FUNC(layer); 此宏的作用主要是实现通用的CCLayer初始化函数的包装。
代码如下:
- #ifndef GAMELEVELLAYER_H_
- #define GAMELEVELLAYER_H_
- #include "cocos2d.h"
- class GameLevelLayer : public cocos2d::CCLayer
- {
- public:
- GameLevelLayer();
- virtual ~GameLevelLayer();
- virtual bool init();
- // implement the "static node()" method manually
- LAYER_NODE_FUNC(GameLevelLayer);//宏
- };
- #endif /* GAMELEVELLAYER_H_ */
- bool GameLevelLayer::init()
- {
- //
- // 1. super init first
- if ( !CCLayer::init() )
- {
- return false;
- }
- //初始化成功 插入CCSprite等
- return true;
- }
3.调用代码生成CCLayer时,通过node();方法调用。如下代码:
- GameLevelScene* instance = GameLevelScene::node();
- GameLevelLayer* gameLevelLayer = GameLevelLayer::node();//通过node()调用
- instance->addChild(gameLevelLayer);
如果通过初始化函数来调用,比如GameLevelLayer* gameLevelLayer = new GameLevelLayer();也是能够生成CCLayer的,但是init();方法将不会被自动调用了。我就是因为这点,耗了一晚上,故此记录。
CCScene初始化流程也是类似的