在Cocos2d-x中经常碰到 init() 和 onEnter()
init()和onEnter()这两个方法都是CCNode的方法。
1.二者的执行顺序是:先init() 后onEnter()。
2.init()在类的初始化时只会调用一次。
3.onEnter在该类被载入场景的时候被调用,可能会发生多次。
下面提供这样一个demo判断二者的执行顺序:
BaseFile.h
#ifndef __trydemo__BaseFile__ #define __trydemo__BaseFile__ #include <iostream> #include "cocos2d.h" USING_NS_CC; class BaseFile:public CCLayer { public: bool init(); void onEnter(); CREATE_FUNC(BaseFile); }; #endif /* defined(__trydemo__BaseFile__) */
BaseFile.cpp
#include "BaseFile.h" bool BaseFile::init() { if (!CCLayer::init()) { return false; } CCLog("base layer init;"); return true; } void BaseFile::onEnter() { CCLog("base layer onEnter;"); }
NextFile.h
#ifndef __trydemo__NextFile__ #define __trydemo__NextFile__ #include <iostream> #include "BaseFile.h" class NextFile:public BaseFile { public: static CCScene* scene(); bool init(); void onEnter(); CREATE_FUNC(NextFile); }; #endif /* defined(__trydemo__NextFile__) */
NextFile.cpp
#include "BaseFile.h" bool NextFile::init() { if (!BaseFile::init()) { return false; } CCLog("next layer init;"); return true; } void NextFile::onEnter() { BaseFile::onEnter(); CCLog("next layer onEnter;"); } CCScene* NextFile::scene() { CCScene *scene = CCScene::create(); NextFile * layer = NextFile::create(); scene->addChild(layer); return scene; }
终端执行结果:
Cocos2d: base layer init; Cocos2d: next layer init; Cocos2d: base layer onenter; Cocos2d: next layer onenter;