首页 > 代码库 > Cocos2d-x多场景切换生命周期

Cocos2d-x多场景切换生命周期

在多个场景切换时候,场景的生命周期会更加复杂。这一节我们介绍一下场景切换生命周期。

多个场景切换时候分为几种情况:

情况1,使用pushScene函数从实现HelloWorld场景进入Setting场景。

情况2,使用replaceScene函数实现从HelloWorld场景进入Setting场景。

情况3,使用popScene函数从实现Setting场景回到HelloWorld场景。

 

我们参考HelloWorld重写Setting层的中几个生命周期函数,代码如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. bool Setting::init()  
  2. {             
  3.     if( !Layer::init() )  
  4.     {  
  5.          returnfalse;  
  6.     }  
  7.    
  8.     log("Settinginit");  
  9.     ......  
  10.     returntrue;  
  11. }  
  12.    
  13. void Setting::onEnter()  
  14. {  
  15.     Layer::onEnter();  
  16.     log("SettingonEnter");  
  17. }  
  18.    
  19. void Setting::onEnterTransitionDidFinish()  
  20. {  
  21.     Layer::onEnterTransitionDidFinish();  
  22.     log("SettingonEnterTransitionDidFinish");  
  23. }  
  24.    
  25. void Setting::onExit()  
  26. {  
  27.     Layer::onExit();  
  28.     log("SettingonExit");  
  29. }  
  30.    
  31. void Setting::onExitTransitionDidStart()  
  32. {  
  33.     Layer::onExitTransitionDidStart();  
  34.     log("SettingonExitTransitionDidStart");  
  35. }  
  36.    
  37. void Setting::cleanup()  
  38. {  
  39.     Layer::cleanup();  
  40.     log("Settingcleanup");  
  41. }  

 

 

 情况1时候,它的调用顺序如下图所示。

 

 

情况2时候,它的调用顺序如下图所示,从图中可见与上面不同是多出HelloWorld中cleanup函数,这也说明replaceScene函数会释放场景对象。

 

 

 

情况3时候,它的调用顺序如下图所示,从图中可见popScene函数时候调用Setting中cleanup函数,这说明popScene函数会释放Setting场景对象,当回到HelloWorld场景时候并不会调用init()函数,而是调用onEnter函数。

 

更多内容请关注Cocos2d-x系列图书《Cocos2d-x实战(卷Ⅰ):C++开发》
本书交流讨论网站:http://www.cocoagame.net
欢迎加入cocos2d-x技术讨论群:257760386、327403678