博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
调用切换Cocos2d-x Scene生命周期 pushScene和replaceScene
阅读量:6812 次
发布时间:2019-06-26

本文共 1962 字,大约阅读时间需要 6 分钟。

上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下调用切换

    

最近在开发过程中遇到很多切换场景的时候概任性崩溃,内存暴增的问题。

    

因此总结一些开发中需要注意的要点,

    

    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 ---- onEnterTransitionDidFini sh();

    

    

此时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来改变坐标。

    

文章结束给大家分享下程序员的一些笑话语录: 很多所谓的牛人也不过如此,离开了你,微软还是微软,Google还是Google,苹果还是苹果,暴雪还是暴雪,而这些牛人离开了公司,自己什么都不是。

转载地址:http://damwl.baihongyu.com/

你可能感兴趣的文章
深入理解Python中赋值、深拷贝(deepcopy)、浅拷贝(copy)
查看>>
最大岛屿-----简单的 搜索
查看>>
判断当前线程是否有管理者权限
查看>>
js 的arguments的一些理解资料
查看>>
xampp启动遇到的小问题
查看>>
python set dict tuple and list
查看>>
通过 docker 搭建自用的 gitlab 服务
查看>>
svg-写一个简单的进度条
查看>>
app 开发
查看>>
python 判断是字母的多种方法
查看>>
mstest run dll
查看>>
.net framework
查看>>
[NOI2016]优秀的拆分
查看>>
贝叶斯分类
查看>>
[hdu5628]Clarke and math(dirichlet卷积)
查看>>
day21 re模块
查看>>
node中exports和module.exports的关系及使用
查看>>
通过css使文字有渐变的效果
查看>>
SQL SERVER2008 打开脚本总是报“未能完成操作,存储空间不足”
查看>>
Jenkins入门系列之——02第二章 Jenkins安装与配置
查看>>