在多個場景切換時候,場景的生命週期會更加複雜。這一節我們介紹一下場景切換生命週期。
多個場景切換時候分爲幾種情況:
情況1,使用pushScene函數從實現HelloWorld場景進入Setting場景。
情況2,使用replaceScene函數實現從HelloWorld場景進入Setting場景。
情況3,使用popScene函數從實現Setting場景回到HelloWorld場景。
我們參考HelloWorld重寫Setting層的中幾個生命週期函數,代碼如下:
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】時候,它的調用順序如下圖所示。
【情況2】時候,它的調用順序如下圖所示,從圖中可見與上面不同是多出HelloWorld中cleanup函數,這也說明replaceScene函數會釋放場景對象。
【情況3】時候,它的調用順序如下圖所示,從圖中可見popScene函數時候調用Setting中cleanup函數,這說明popScene函數會釋放Setting場景對象,當回到HelloWorld場景時候並不會調用init()函數,而是調用onEnter函數。