quick cocos2d x场景切换的生命周期函数调用学习

先上一个场景的基本模版:

 1 local ModelScene = class("ModelScene", function()
 2     return display.newScene("ModelScene")
 3 end)
 4 
 5 function ModelScene:ctor()
 6      self.sceneName = "ModelScene"
 7     -- 注册点击事件监听
 8     self.layer = display.newLayer()
 9     self.layer:addTouchEventListener(function(event, x, y)
10         return self:onTouch(event, x, y)
11     end)
12     self:addChild(self.layer)
13     
14 end
15 
16 function ModelScene:onTouch( event, x, y )
17     if event == "began" then
18         return true
19     elseif event == "moved" then
20         return true
21     elseif event == "ended" then
22         
23     end
24 end
25 
26 function ModelScene:onEnter()
27 
28     -- 框架结构
29     self.layer:setTouchEnabled(true)
30 
31     if device.platform == "android" then
32         -- avoid unmeant back
33         self:performWithDelay(function()
34             -- keypad layer, for android
35             local layer = display.newLayer()
36             layer:addKeypadEventListener(function(event)
37                 if event == "back" then app.exit() end
38             end)
39             self:addChild(layer)
40 
41             layer:setKeypadEnabled(true)
42         end, 0.5)
43     end
44 end
45 
46 function ModelScene:onExit()
47     self.sceneName = nil
48 end
49 
50 function ModelScene:onCleanup()
51     
52 end
53 
54 function ModelScene:onExitTransitionStart()
55     
56 end
57 
58 function ModelScene:onEnterTransitionFinish()
59 
60 end
61 
62 
63 return ModelScene

依据这个模版,写了一个测试模型。两个场景的切换:(PuzzleScene && DemoScene)

在生命周期函数中添加语句打印。控制台输出结果。

1)首先进入的是PuzzleScene,点击跳转到DemoScene,执行语句:

PuzzleScene执行的顺序是:onExitTransitionStart -> onExit -> onCleanup

DemoScene执行的顺序是:ctor -> onEnter -> onEnterTransitionFinish

2)再从DemoScene进入PuzzleScene,执行语句如下:

对比可知:正好和上面的情况反过来了。

场景退出时,需要注意的是最后调用的函数是cleanup。

知道了这五个生命函数和一个构造函数在场景切换的顺序后,就可以在程序中恰当的进行资源释放等操作。

至于为什么这么个执行顺序,需要先看quick库的这个代码:

通过self:registerScriptHandler(handler)注册了回调监听函数。这样在场景切换的时候就可以按照回调函数传回来的event,来执行相应的生命周期函数了。

Lua注册监听函数后,其实真正的场景切换执行者还是C++代码。所以~~~Lua更像是一个层,附在了C++的躯体上,

通过tolua++工具,生成中间的lua到c++的调用转换函数。

posted @ 2014-07-01 21:02  Mr轨迹  阅读(810)  评论(0编辑  收藏  举报