Cocos2d-x Scene生命周期 pushScene和replaceScene

news/2024/7/20 12:32:17 标签: 游戏, 内存管理
(2013-05-19 03:07:43)
转载
标签: 

生命周期

 

杂谈

 
最近在开发过程中遇到很多切换场景的时候概率性崩溃,内存暴增的问题。因此总结一些开发中需要注意的要点,
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:  布景. 类#20284;是层的概念,也可来源于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来转变坐标。

转载于:https://www.cnblogs.com/alsky/p/3170710.html


http://www.niftyadmin.cn/n/1795066.html

相关文章

【转】Android SDK,ADT,API 版本的对应关系

写对应关系之前,先了解一下几个名字的含义. 一. Android ADT: 按照官方网站的开发介绍:Android Development Tools (ADT) is a plugin for the Eclipse IDE that is designed to give you a powerful, integrated environment in which to build Android applications. 中文的…

使用nav2djs案例心得总结之_第19篇跑通导航实现

目录 简介 一、启动仿真 二、启动rosbridge 接口 三、创建HTML脚本 四、运行测试 简介 本节主要学习研究nav2djs包测试导航的功能实现,该功能类似rviz中的2D Nav Goal功

PHP 实现短域名互转

1 /**2 * 短域名生成&解析类3 */4 class Build_URL {5 6 private $mem;7 private $base_url http://xxx.com/;8 9 public function __construct() { 10 $mem_conf array( 11 array( 12 host > …

Java IO流学习总结七:Commons IO 2.5-FileUtils

Java IO流学习总结七:Commons IO 2.5-FileUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54972773 本文出自【赵彦军的博客】 在上面的几篇文章中,介绍了IO的常规用法,今天介绍Commons IO框架的使用。…

Ubuntu 中文输入法安装包

1. 打开 Dashboard http://www.2cto.com/os/201207/144189.html转载于:https://www.cnblogs.com/ilazysoft/p/3171869.html

使用roslibjs案例心得总结之_第20篇发送单个目标点导航的实现

目录 简介 一、启动仿真 二、启动rosbridge 接口 三、发送单个目标点 3.1、通过终端命令发送

linux常用命令-ls

alias llls -l --colorauto-l:长格式[rhellocalhost ~]$ lltotal 32drwxr-xr-x. 4 rhel rhel 4096 Jun 25 2015 Desktopdrwxr-xr-x. 2 rhel rhel 4096 Jun 21 2015 Documentsdrwxr-xr-x. 2 rhel rhel 4096 Jun 21 2015 Downloadsdrwxr-xr-x. 2 rhel rhel 4096 Ju…

[转载+整理]JVM性能调优----JVM架构

JVM的总体结构参考如下两图: 从总体结构上看,上面可大体分为五部分来体现,第一部分是类装载子系统,第二部分是运行数据区,第三部分是执行引擎,第四部分是本地方法接口,第五部分就是本地方法库。…