Cocos2d-x Scene生命周期 pushScene和replaceScene
最近在开发过程中遇到很多切换场景的时候概率性崩溃,内存暴增的问题。因此总结一些开发中需要注意的要点,
1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。
因为pushScene并不会销毁前一个scene,仅仅是将后一个scene按照堆栈的方式加入到前一个scene的上面。如果自身代码中内存管理写的不好的,利用pushScene很难发现该方面的问题,一旦崩溃定位都很难定位。replaceScene可以及早的将隐含的问题给暴露出来。
2. 尽量不要在onEnter里面初始化精灵Sprite
这个就和上一条有点关系了,如果使用了pushScene,那么再popScene的时候是不会调用前一个场景的init方法的,所以有同学就喜欢把一些初始化放在onEnter里面,具体为什么不好,我们来看一下不同切换场景的时候,每个Scene的生命周期就知道了。
假设scene A是活动场景,现在我们用scene B来pushScene替换A,A和B的生命周期是这样的:
B ---- init();
A ---- onExit();
B ---- onEnter();
B ---- onEnterTransitionDidFinish();
此时popScene,弹出scene B,函数调用如下:
B ---- onExit();
B ---- 析构函数被调用
A ---- onEnter();
从上面可以看出以下几点,
1. A的析构函数始终未被调用,因此A一直在内存中。
2. 先执行B的init()函数,之后才调用A的onExit()方法,再之后才调用B的onEnter();所以初始化最好应该放在init中来初始化。在上一个场景退出之前初始化好后一个场景需要的资源。
同样的,我们再来看一下replaceScene切换场景,scene的生命周期:
假设scene A是活动场景,现在我们用scene B来replaceScene替换A,A和B的生命周期是这样的:
B ---- init();
A ---- onExit();
A ---- 析构函数被调用
B ---- onEnter();
B ---- onEnterTransitionDidFinish();
此时B replace A回来的调用跟上面一样,如下:
A ---- init();
B ---- onExit();
B ---- 析构函数调用
A ---- onEnter();
3. 一些基本的

CCDirector: 导演,负责场景的切换以及场景的信息。如宽度,高度,旋转场景内容。
CCScene: 场景. 场景包含有布景,精灵,每场戏的不同,要切换场景。游戏中可分为主界面, 游戏, 分数榜,结束界面等。
CCLayer: 布景. 类似是层的概念,也可来源于PS的层的概念。每一层都带有众多精灵等
CCSprite: 精灵。就是演员的,演员就需要加入到层里面去的。有相应的动作。
CCAction: 动作。精灵的动作。

scene(即 CCScene类)是app 工作流上独立块。scene也叫做 screents 或者“stages”. 一个app可能拥有多个scenes, 但在任何时候只能有一个是激活状态的。
一个cocos2d CCScene 对象 由一个或多个layers组成(layer即CCLayer 对象),layers之间是前后相连的。layer提供了scene的外观 appearance和行为behavior;通常的用法是直接用一个或多个layers实例化一个scence; CCScene的子类CCTrasitionScene 实现移动transitions , 提供两个scenes 之间的转移效果((比如fade out/in, slide from a side, 等效果).)由于scenes 是CCNode子类,所以scenes可以手工或者用actions来转变坐标。
Cocos2d-x Scene生命周期 pushScene和replaceScene的更多相关文章
- 【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析
大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结. 场景切换生命周期 场景切换用到的函数: bool Setting::init() { ...
- cocos进阶教程(3)Cocos2d-x多场景切换生命周期
在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期. 多个场景切换时候分为几种情况: 情况1,使用pushScene函数从实现HelloWorld场景进入Setting场 ...
- Cocos2d-x多场景切换生命周期
在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期. 多个场景切换时候分为几种情况: 情况1,使用pushScene函数从实现HelloWorld场景进入Setting场 ...
- Cocos2d-x Lua中多场景切换生命周期
在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期.多个场景切换时候分为几种情况:情况1,使用pushScene函数从实现GameScene场景进入SettingScen ...
- MonoBehaviour Lifecycle(生命周期/脚本执行顺序)
脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...
- Unity 生命周期
原文翻译: Execution Order of Event Functions 事件函数的执行顺序 Edit ...
- [Cocos2d-x]节点的生命周期
清楚的知道一个对象的生命周期,在开发时候是非常必要的,对于自身定义并且创建的对象而言,它的生命周期是由程序员控制,但是对于coco2d-x中的节点,我们必须弄清它的生命周期,这样才能在开发中得心应手. ...
- 微信小程序开发之详解生命周期方法
生命周期是指一个小程序从创建到销毁的一系列过程 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面 先来看一张小程序项目结构 从上图可以看出,根目录下面有包含了app.js ...
- Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题
主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题. 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易.推荐 ...
随机推荐
- 算法笔记_196:历届试题 剪格子(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|**** ...
- 转:C#委托与事件
委托与事件 Ganesh Nataraj最近写了一篇解释委托与事件的文章,在坊间流传较广,今天翻译成中文与大家共享,如有不妥之处,欢迎留言讨论. C#中的委托类似于C或C++中的函数指针. ...
- 微信QQ的二维码登录原理js代码解析
这篇文章主要大家详细解析了微信QQ的二维码登录原理js代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗 ...
- windows登陆密码破解方法之一
网上的一些人让别人进入命令提示符安全模式,我比较奇怪如果没有密码怎么进去?能进去干嘛还要进去? 本笨方法的原理主要是利用登陆界面的一些程序入口,把它当成后门来使用,比如win7登陆界面上除了输密码的地 ...
- LR函数基础(一)
函数用到:web_reg_find(). lr_log_message(). lr_eval_string().strcmp().atoi() Action(){ web_reg_find(&q ...
- WIFI物联网平台微信端开发分享
本文由企鹅圈原创成员Hunter_Zhu贡献. 本篇文章是基于近期一个项目微信端开发过程的一个总结.文中主要介绍了云智易平台下微信端开发的流程.该平台提供的主要功能以及此次H5开发使用到的一些UI组件 ...
- jquery添加用户 事例
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- mybatis实现多表联合查询
本文转自:http://www.cnblogs.com/xdp-gacl/p/4264440.html#!comments 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) ...
- O(n)复杂度求没有出现的数字(leetcode448)
一个长度为N的数组,其中元素取值为1-N,求这个数组中没有出现的.1-N之间的数字. 要求无额外空间,O(n)时间复杂度. nums[i]=-1表示i数字已经出现过了 class Solution(o ...
- linux命令中的 < 和 |、>符号作用就解释
输出重定向比如输入一条命令,默认行为是将结果输出到屏幕.但有时候我们需要将输出的结果保存到文件,就可以用重定向.ps > ps.txt < 表示的是输入重定向的意思,就是把<后面跟的 ...