CCNode有四个生命周期函数,分别是onEnter、onEnterTransitionDidFinish、onExit、onExitTransitionDidStart,我们使用的cocos2dx的类一般都是继承自CCNode的,所以也是有这四个函数的,我们可以在这些函数中做一些事情。但是首先让我们看一下它们真正的调用顺序。以下的这段代码是写在HelloWorld中的,其中的menuCloseCallback就是我们按下那个按钮调用的函数,这里我们将我们的场景切换到另一个场景类TestScene中。那俩个onExit函数就是继承自父类的,但是记住在这些函数中要先初始化父类的对应的函数,然后我们做了一个打印的操作,观察他们的调用顺序。

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
	CCDirector::sharedDirector()->replaceScene(TestScene::scene());
}

void HelloWorld::onExit()
{
	CCLayer::onExit();
	CCLog("HelloWorld-->onExit()");
}

void HelloWorld::onExitTransitionDidStart()
{
	CCLayer::onExitTransitionDidStart();
	CCLog("HelloWorld-->onExitTransitionDidStart()");
}

以下的就是TestScene中的俩个enter函数,同样是打印一句话,同样要初始化父类的方法。

void TestScene::onEnter()
{
	CCLayer::onEnter();
	CCLog("TestScene-->onEnter()");
}

void TestScene::onEnterTransitionDidFinish()
{
	CCLayer::onEnterTransitionDidFinish();
	CCLog("TestScene-->onEnterTransitionDidFinish");
}

解析CCNode的四个生命周期函

下面说下在这四个周期函数中都做些什么事情。在onEnter、onExit中我们一般都是加载和释放资源,比如声音UI等等,当然你也可以在loading界面中统一的加载资源,具体怎么实现就看你自己的了。onEnter中还经常做的就是刷新界面,比如在一个射击类游戏中,你发现你已经没有血了,你要去背包吃一个大血,于是你点了背包键,切换到了背包scene,吃了血之后,你退出了背包scene,回到了游戏scene,这时候你游戏scene的血条要增加 , 这个血条重置的操作,就是写在了游戏scene的onenter中 。而在onExit中,我们要做的是卸载监听器,这个的具体用法请看CCNotificationCenter事件监听器上边是直接使用replaceScene()的时候(使用pushScene同样的效果),如果我们使用的是CCTransition系列的函数,效果就不一样了,函数的调用顺序会不同。

CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(2.0f,TestScene::scene()));

解析CCNode的四个生命周期函数