天天看點

Cocos2d-x多場景切換生命周期

在多個場景切換時候,場景的生命周期會更加複雜。這一節我們介紹一下場景切換生命周期。

多個場景切換時候分為幾種情況:

情況1,使用pushScene函數從實作HelloWorld場景進入Setting場景。

情況2,使用replaceScene函數實作從HelloWorld場景進入Setting場景。

情況3,使用popScene函數從實作Setting場景回到HelloWorld場景。

我們參考HelloWorld重寫Setting層的中幾個生命周期函數,代碼如下:

[html] 

bool Setting::init()  

{             

    if( !Layer::init() )  

    {  

         returnfalse;  

    }  

    log("Settinginit");  

    ......  

    returntrue;  

}  

void Setting::onEnter()  

{  

    Layer::onEnter();  

    log("SettingonEnter");  

void Setting::onEnterTransitionDidFinish()  

    Layer::onEnterTransitionDidFinish();  

    log("SettingonEnterTransitionDidFinish");  

void Setting::onExit()  

    Layer::onExit();  

    log("SettingonExit");  

void Setting::onExitTransitionDidStart()  

    Layer::onExitTransitionDidStart();  

    log("SettingonExitTransitionDidStart");  

void Setting::cleanup()  

    Layer::cleanup();  

    log("Settingcleanup");  

 情況1時候,它的調用順序如下圖所示。

Cocos2d-x多場景切換生命周期

情況2時候,它的調用順序如下圖所示,從圖中可見與上面不同是多出HelloWorld中cleanup函數,這也說明replaceScene函數會釋放場景對象。

Cocos2d-x多場景切換生命周期

情況3時候,它的調用順序如下圖所示,從圖中可見popScene函數時候調用Setting中cleanup函數,這說明popScene函數會釋放Setting場景對象,當回到HelloWorld場景時候并不會調用init()函數,而是調用onEnter函數。

Cocos2d-x多場景切換生命周期

更多内容請關注Cocos2d-x系列圖書

本書交流讨論網站:

歡迎加入cocos2d-x技術讨論群:257760386、327403678