場景(Scene)以及全部節點(Node)的生命週期事件以下:
enter。進入場景時候觸發。
enterTransitionFinish。進入場景並且過渡動畫結束時候觸發。
exit。退出場景時候觸發 。
exitTransitionDidStart。退出場景並且開始過渡動畫時候觸發。
cleanup。場景對象被清除時候觸發。
提示 GameScene場景中的(Scene)繼承於節點(Node),這些生命週期事件根本上是從Node繼承而來。事實上全部Node對象(包括:場景、層、精靈等)都有這些事件,具體實現代碼與GameScene場景相似。
咱們爲GameScene場景添加生命週期函數相關代碼以下:
html
[html] view plaincopy微信
require "Cocos2d" 函數
require "Cocos2dConstants" 動畫
local SettingScene = require("SettingScene") 網站
local size = cc.Director:getInstance():getWinSize() ui
local GameScene = class("GameScene",function() lua
return cc.Scene:create() spa
end) .net
function GameScene.create() 日誌
local scene = GameScene.new()
scene:addChild(scene:createLayer())
return scene
end
function GameScene:ctor() ①
cclog("GameScene init")
--場景生命週期事件處理
local function onNodeEvent(event)
if event == "enter" then ②
self:onEnter()
elseif event == "enterTransitionFinish" then ③
self:onEnterTransitionFinish()
elseif event == "exit" then ④
self:onExit()
elseif event == "exitTransitionStart" then ⑤
self:onExitTransitionStart()
elseif event == "cleanup" then ⑥
self:cleanup()
end
end
self:registerScriptHandler(onNodeEvent) ⑦
end
function GameScene:onEnter() ⑧
cclog("GameScene onEnter")
end
function GameScene:onEnterTransitionFinish() ⑨
cclog("GameScene onEnterTransitionFinish")
end
function GameScene:onExit() ⑩
cclog("GameScene onExit")
end
function GameScene:onExitTransitionStart() ⑪
cclog("GameScene onExitTransitionStart")
end
function GameScene:cleanup() ⑫
cclog("GameScene cleanup")
end
… …
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
local function onNodeEvent(event)
if event == "enter" then ②
self:onEnter()
elseif event == "enterTransitionFinish" then ③
self:onEnterTransitionFinish()
elseif event == "exit" then ④
self:onExit()
elseif event == "exitTransitionStart" then ⑤
self:onExitTransitionStart()
elseif event == "cleanup" then ⑥
self:cleanup()
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課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息