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++的调用转换函数。

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

时间: 2024-10-05 04:22:54

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

无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCreate()开始,直到调用onDestory()为止.Activity在onCreate()中设置所有“全局”状态以完成初始化. 而在onDestory()中释放所有系统资源.例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程, 而在onDestory()销

Intent七大属性,Activity的启动方式,横竖屏切换的生命周期,现场保护-->

---------------------------------Intent七大属性------------------------------------- 第一类:启动,有ComponentName(显式),Action(隐式),Category(隐式). 第二类:传值,有Data(隐式),Type(隐式),Extra(隐式.显式). 第三类:启动模式,有Flag. ---------------------------------------Activity的启动方式----------

Android横竖屏切换的生命周期

现在的手机默认情况下可以横竖屏切换,但是横竖屏切换的生命周期是怎么样的,今天就来说明一下,以防你开发的app横竖屏时game over 1.在不做任何配置的情况下,加载一个activity的打印日志: 切换屏幕时方向的打印日志: ps:我这里没出现什么横屏切换竖屏时执行两次oncreate,个人觉得不对 2.配置android:configChanges="keyboardHidden|orientation|screenSize"时,屏幕切换时,不会出现重启activity 3.配置

Fragment和Activity生命周期以及横竖屏切换对生命周期的影响

Fragment生命周期图解,fragment和activity生命周期对比 生命周期变化 : 切换到该Fragment 05-21 14:26:35.095: D/FragmentDemo(7649): onAttach 05-21 14:26:35.095: D/FragmentDemo(7649): onCreate 05-21 14:26:35.095: D/FragmentDemo(7649): onCreateView 05-21 14:26:35.100: D/FragmentDe

Android--纠正Activity横竖屏切换的生命周期的错误

1.本机测试环境 android 4.3, android:targetSdkVersion : 12,13,17 2.关于横竖屏切换的Activity生命周期的错误说法 初学Android,在学习Activity的生命周期时,自己在本机实验时,发现了一些不合理的情况. 那就是在横竖屏切换时,Activity并不会像网上大多数人所说的那样: 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次. 设置Activi

Bean默认配置及生命周期之学习总结

Bean默认的是单例的. 如果不想单例需要如下配置: <bean id="user" class="..." singleton="false"/> singleton就是配置这个bean是否是单例的,如果不写,就是默认值true. 注解: spring Bean生命周期 1.Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括: 默认情况下scope="singleton",那么该B

vue 生命周期一点学习

再 vue中生命周期一般包含:beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestory,destoried. 在每个阶段我们可以做相应的事,因为在不同的阶段我们的vue对象的某些属性并未生成或则更新. 比如再beforeCreate阶段我们就可以进行loading等前面准备的事,created就可进行事件的初始化,此时还不能进行dom操作,mounted和created阶段可以进行ajax的请求等操作,

Cocos2xd__场景(层)的生命周期

生命周期函数: 1. bool init():初始化场景时调用 2. void onEnter():进入场景时调用 3. void onEnterTransitionDidFinish():进入场景且过度动画结束时调用 4. void onExit():退出场景时调用 5. void onExitTransitionDidStart():退出场景且开始过度动画时调用 6. void cleanup():场景对象被清除时调用 如: virtual void onEnter() override {

cocos2dx 3.x(场景(层)的生命周期)

1 //进入当前层初第一步始化层调用 2 bool GameScence::init() 3 { 4 if( !void init() ) 5 { 6 returnfalse; 7 } 8 9 log("进入当前层初第一步始化层调用"); 10 11 return true; 12 } 13 14 //进入当前层的时候调用 15 void GameScence::onEnter() 16 { 17 //在.h文件中定义 18 //void onEnter(); 19 log("