Cocos2d-x Lua中生命週期函數

場景(Scene)以及全部節點(Node)的生命週期事件以下:
enter。進入場景時候觸發。
enterTransitionFinish。進入場景並且過渡動畫結束時候觸發。
exit。退出場景時候觸發 。
exitTransitionDidStart。退出場景並且開始過渡動畫時候觸發。
cleanup。場景對象被清除時候觸發。
提示  GameScene場景中的(Scene)繼承於節點(Node),這些生命週期事件根本上是從Node繼承而來。事實上全部Node對象(包括:場景、層、精靈等)都有這些事件,具體實現代碼與GameScene場景相似。

咱們爲GameScene場景添加生命週期函數相關代碼以下:
html

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片微信

  1. require "Cocos2d"  函數

  2. require "Cocos2dConstants"  動畫

  3.   

  4.   

  5. local SettingScene = require("SettingScene")  網站

  6. local size = cc.Director:getInstance():getWinSize()  ui

  7.   

  8.   

  9. local GameScene = class("GameScene",function()  lua

  10.     return cc.Scene:create()  spa

  11. end)  .net

  12.   

  13.   

  14. function GameScene.create()  日誌

  15.     local scene = GameScene.new()  

  16.     scene:addChild(scene:createLayer())  

  17.     return scene  

  18. end  

  19.   

  20.   

  21. function GameScene:ctor()                                               ①  

  22.     cclog("GameScene init")  

  23.     --場景生命週期事件處理  

  24.     local function onNodeEvent(event)     

  25.         if event == "enter" then                                            ②  

  26.             self:onEnter()                                                

  27.         elseif event == "enterTransitionFinish" then                                ③  

  28.             self:onEnterTransitionFinish()                                    

  29.         elseif event == "exit" then                                         ④  

  30.             self:onExit()                                                 

  31.         elseif event == "exitTransitionStart" then                              ⑤  

  32.             self:onExitTransitionStart()  

  33.         elseif event == "cleanup" then                                      ⑥  

  34.             self:cleanup()  

  35.         end  

  36.     end  

  37.     self:registerScriptHandler(onNodeEvent)                                 ⑦  

  38. end  

  39.   

  40.   

  41. function GameScene:onEnter()                                            ⑧  

  42.     cclog("GameScene onEnter")  

  43. end  

  44.   

  45.   

  46. function GameScene:onEnterTransitionFinish()                                    ⑨  

  47.     cclog("GameScene onEnterTransitionFinish")  

  48. end  

  49.   

  50.   

  51. function GameScene:onExit()                                             ⑩  

  52.     cclog("GameScene onExit")  

  53. end  

  54.   

  55.   

  56. function GameScene:onExitTransitionStart()                                  ⑪  

  57.     cclog("GameScene onExitTransitionStart")  

  58. end  

  59.   

  60.   

  61. function GameScene:cleanup()                                            ⑫  

  62.     cclog("GameScene cleanup")  

  63. end  

  64.   

  65.   

  66. … …  

  67.   

  68.   

  69. return GameScene  



上述代碼第①行GameScene:ctor()是GameScene場景構造函數,在次函數中進行GameScene場景的初始化,也就是觸發init事件。第②~⑥行代碼場景生命週期事件處理,根據事件event對象判斷是哪種類型的場景生命週期事件。其中第②行是判斷enter事件,是場景進入時候觸發,判斷爲true狀況下,而後經過代碼self:onEnter()調用第⑧行的GameScene:onEnter()函數。
第③行是判斷enterTransitionFinish事件,是場景進入而且過渡動畫完成時候觸發,判斷爲true狀況下,而後經過代碼self:onEnterTransitionFinish()調用第⑨行的GameScene:onEnterTransitionFinish()函數。
第④行是判斷exit事件,是場景退出時候觸發,判斷爲true狀況下,而後經過代碼self:onExit()調用第⑩行的GameScene:onExit()函數。
第⑤行是判斷exitTransitionStart事件,是場景退出過渡動畫開始時候觸發,判斷爲true狀況下,而後經過代碼self:onExitTransitionStart()調用第⑪行的GameScene:onExitTransitionStart()函數。
第⑥行是判斷cleanup事件,是場景銷燬時候觸發,判斷爲true狀況下,而後經過代碼self:cleanup()調用第⑫行的GameScene:cleanup()函數。


若是GameScene是第一個場景,當啓動GameScene場景時候,它的調用順序以下圖所示。

 第一個場景啓動順序

提示  GameScene init事件並非從節點繼承的事件(enter、enterTransitionFinish、exit、exitTransitionStart和cleanup),「GameScene init」日誌信息是在GameScene:ctor()構造函數中輸出的。咱們把ctor()構造函數調用與其它的幾個事件調用放在一塊兒討論,那麼由於ctor()構造函數是用於初始化場景的,它至關於init事件的做用,所以本書將ctor()構造函數調用都稱爲「init事件」觸發。

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. local function onNodeEvent(event)     

  2.         if event == "enter" then                                            ②  

  3.             self:onEnter()                                                

  4.         elseif event == "enterTransitionFinish" then                                ③  

  5.             self:onEnterTransitionFinish()                                    

  6.         elseif event == "exit" then                                         ④  

  7.             self:onExit()                                                 

  8.         elseif event == "exitTransitionStart" then                              ⑤  

  9.             self:onExitTransitionStart()  

  10.         elseif event == "cleanup" then                                      ⑥  

  11.             self:cleanup()  

  12.         end  


更多內容請關注最新Cocos圖書《Cocos2d-x實戰:Lua卷——Cocos2d-lua開發

本書交流討論網站:http://www.cocoagame.net

歡迎加入Cocos2d-x技術討論羣:257760386

更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com

智捷課堂現推出Cocos會員,敬請關注:http://v.51work6.com/courseInfoRedirect.do?action=netDetialInfo&courseId=844465&categoryId=0

《Cocos2d-x實戰 Lua卷》現已上線,各大商店均已開售:

京東:http://item.jd.com/11659697.html

歡迎關注智捷iOS課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息

相關文章
相關標籤/搜索