在多个场景切换时候,场景的生命周期会更加复杂。这一节我们介绍一下场景切换生命周期。
多个场景切换时候分为几种情况:
情况1,使用pushScene函数从实现GameScene场景进入SettingScene场景。
情况2,使用replaceScene函数实现从GameScene场景进入SettingScene场景。
情况3,使用popScene函数从实现SettingScene场景回到GameScene场景。
我们参考GameScene重写SettingScene的中几个生命周期函数,代码如下:

  1. function SettingScene:ctor()
  2. -- self.visibleSize = cc.Director:getInstance():getVisibleSize()
  3. cclog("SettingScene init")
  4. --场景节点事件处理
  5. local function onNodeEvent(event)
  6. if event == "enter" then
  7. self:onEnter()
  8. elseif event == "enterTransitionFinish" then
  9. self:onEnterTransitionFinish()
  10. elseif event == "exit" then
  11. self:onExit()
  12. elseif event == "exitTransitionStart" then
  13. self:onExitTransitionStart()
  14. elseif event == "cleanup" then
  15. self:cleanup()
  16. end
  17. end
  18. self:registerScriptHandler(onNodeEvent)
  19. end
  20. function SettingScene:onEnter()
  21. cclog("SettingScene onEnter")
  22. end
  23. function SettingScene:onEnterTransitionFinish()
  24. cclog("SettingScene onEnterTransitionFinish")
  25. end
  26. function SettingScene:onExit()
  27. cclog("SettingScene onExit")
  28. end
  29. function SettingScene:onExitTransitionStart()
  30. cclog("SettingScene onExitTransitionStart")
  31. end
  32. function SettingScene:cleanup()
  33. cclog("SettingScene cleanup")
  34. end

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

情况1生命周期事件顺序

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

生命周期事件顺序

3、情况3时候,它的调用顺序如下图所示,从图中可见popScene函数时候触发SettingScene的cleanup事件,这说明popScene函数会释放SettingScene场景对象,当回到GameScene场景时候并不会触发init事件,而是触发enter事件。

情况3生命周期事件顺序
 
更多内容请关注最新Cocos图书《Cocos2d-x实战:Lua卷——Cocos2d-lua开发》

本书交流讨论网站:http://www.cocoagame.net

欢迎加入Cocos2d-x技术讨论群:257760386

更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com

《Cocos2d-x实战 Lua卷》现已上线,各大商店均已开售:

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

欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息

Cocos2d-x Lua中多场景切换生命周期的更多相关文章

  1. 【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析

    大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结. 场景切换生命周期 场景切换用到的函数: bool Setting::init() { ...

  2. cocos进阶教程(3)Cocos2d-x多场景切换生命周期

    在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期. 多个场景切换时候分为几种情况: 情况1,使用pushScene函数从实现HelloWorld场景进入Setting场 ...

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

    在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期. 多个场景切换时候分为几种情况: 情况1,使用pushScene函数从实现HelloWorld场景进入Setting场 ...

  4. 【转】WPF中的窗口的生命周期

    原文地址:http://www.cnblogs.com/Jennifer/articles/1997763.html WPF中的窗口的生命周期 WPF中所有窗口的基类型都是System.Windows ...

  5. React Native 中的component 的生命周期

    React Native中的component跟Android中的activity,fragment等一样,存在生命周期,下面先给出component的生命周期图 getDefaultProps ob ...

  6. Envoy 代理中的请求的生命周期

    Envoy 代理中的请求的生命周期 翻译自Envoy官方文档. 目录 Envoy 代理中的请求的生命周期 术语 网络拓扑 配置 高层架构 请求流 总览 1.Listener TCP连接的接收 2.监听 ...

  7. vue生命周期图示中英文版Vue实例生命周期钩子

    vue生命周期图示中英文版Vue实例生命周期钩子知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,Vue.js 作者尤雨溪12月4日正面回应了该问题.以下是尤雨溪回复 ...

  8. spring-第八篇之容器中的bean的生命周期

    1.容器中的bean的生命周期 spring容器可以管理singleton作用域的bean的生命周期,包括bean何时被创建.何时初始化完成.何时被销毁.客户端代码不能控制该类型bean的销毁.spr ...

  9. cocos2d-x 2.x版本中,场景切换各方法调用顺序

    假设从A场景切换到B场景,调用各场景方法的顺序为: 如果没有切换效果(transition),则先调用B的init(),再调用A的onExitTransitionStart(),接着调用A的onExi ...

随机推荐

  1. 云计算之路-阿里云上-十字路口:阿里云SLB故障

    2013年7月24日,18:20~18:50左右,处于阿里云云服务最前沿的SLB(负载均衡)出现故障,造成了网站不能正常访问(由于是最前沿,这次连502也看不到了). 在大家对昨日RDS故障带来的麻烦 ...

  2. ArcGIS Engine读取GDB中的Shape

    string gdbPath = @"D:\Documents\ArcGIS\Default.gdb"; FileGDBWorkspaceFactoryClass pFileGDB ...

  3. $ gulp watch 运行出错解决方法

    $ gulp watch 运行出错解决方法   $ gulp watch     如果你出现了如下报错信息: gulp-notify: [Laravel Elixir] Browserify Fail ...

  4. 【Python3 爬虫】10_Beautiful Soup库的使用

    之前学习了正则表达式,但是发现如果用正则表达式写网络爬虫,那是相当的复杂啊!于是就有了Beautiful Soup 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓 ...

  5. 虚拟机下安装CentOS无法上网的解决方式

    我使用VMware虚拟机安装Ubuntu和CentOS,都使用NAT模式连接网络,可是Ubutun能够正常上网,而CentOS不能连接到网络. 原来Centos7默认是不启用有线网卡的.须要手动开启. ...

  6. VIM-不常用或不知道的技巧

    cc 清除一行 并在本行编辑, 同理 cw :32,65d 多行删除 g/pattern/d 删除包含特定字符的行 v/pattern/d 删除不包含指定字符的行 等同于 g!/pattern/d y ...

  7. BigInteger 与 BigDecimal区别,及BigDecimal详解

    一般来说,BigInteger用的不是很多,BigDecimal用的稍微多一点,就比如说JDBC中,如果一个字段的数据库类型是Number, 那么getObject().getClass()的结果是j ...

  8. Coolite简介

    Coolite Toolkit 简介 Coolite Toolkit 是一个支持ASP.NET AJAX的Web控件 Coolite Toolkit是基于跨浏览器的ExtJS 库开发而来的,并且简化了 ...

  9. [原创]FreeSWITCH实现多人来电思路

    [原创]FreeSWITCH实现多人来电思路 场景介绍 该篇文章主要用于介绍如何使用FreeSWITCH实现通讯系统中常见的多人来电功能. 具体场景如下: A与B正在通话中,此时C拨打A/B,Free ...

  10. linux学习一个服务(未完)

    学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外)