轉載地址:http://blog.csdn.net/tonny_guan/article/details/27985895
層(Layer)的生命週期函數有如下:
init()。初始化層調用。
onEnter()。進入層時候調用。
onEnterTransitionDidFinish()。進入層而且過渡動畫結束時候調用。
onExitTransitionDidStart()。退出層而且開始過渡動畫時候調用。
onExit()。退出層時候調用。
cleanup()。層對象被清除時候調用。
提示 層(Layer)繼承於節點(Node),這些生命週期函數根本上是從Node繼承而來。事實上所有Node對象(包括:場景、層、精靈等)都有這些函數,只要是子類化這些類都可以重寫這些函數,來處理這些對象的不同生命週期階段事件。
我們重寫HelloWorld層的中幾個生命週期函數,代碼如下:
bool HelloWorld::init()
{
if( !Layer::init() )
{
returnfalse;
}
log("HelloWorldinit");
......
returntrue;
}
void HelloWorld::onEnter()
{
Layer::onEnter();
log("HelloWorldonEnter");
}
voidHelloWorld::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();
log("HelloWorldonEnterTransitionDidFinish");
}
void HelloWorld::onExit()
{
Layer::onExit();
log("HelloWorldonExit");
}
voidHelloWorld::onExitTransitionDidStart()
{
Layer::onExitTransitionDidStart();
log("HelloWorldonExitTransitionDidStart");
}
void HelloWorld::cleanup()
{
Layer::cleanup();
log("HelloWorldcleanup");
}
注意 在重寫層生命週期函數中,第一行代碼應該是調用父類的函數,例如HelloWorld::onEnter()中第一行應該是Layer::onEnter()函數,如果不調用父類的函數可能會導致層中動畫、動作或計劃無法執行。
如果HelloWorld是第一個場景,當啓動HelloWorld場景時候,它的調用順序如下圖所示: