pushScene,popScene,replaceScen切换场景之间的区别
来源:互联网 发布:佣金宝交易软件 编辑:程序博客网 时间:2024/05/18 12:42
1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。
这里要用到播放背景音乐,背景音乐可以在一开始进入场景 onEnter() 时候进行预加载,然后在完全进入场景 onEnterTransitionDidFinish() 的时候开始播放音乐。转自:http://blog.csdn.net/w18767104183/article/details/19200009
因为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();
转自:http://blog.sina.com.cn/s/blog_67a5e47201019280.html
onEnter() 是在进入场景的一瞬间就开始执行了。
onEnterTransitionDidFinish() 是在完全进入场景后开始执行的。
因为在弄场景的延时跳转,游戏一开始显示公司Logo,然后显示游戏场景界面。
在第一个场景welcomScene的 onEnter() 开始场景跳转的事件。 延时3秒。
- void WelcomScene::onEnter()
- {
- //跳转场景
- CCScene* pScene=InverseWarsScene::scene();
- CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(3,pScene));
- }
这里要用到播放背景音乐,背景音乐可以在一开始进入场景 onEnter() 时候进行预加载,然后在完全进入场景 onEnterTransitionDidFinish() 的时候开始播放音乐。
- void InverseWarsScene::onEnter()
- {
- //在刚进入界面的时候预加载背景音乐,在inverseWarsScene场景开始播放音乐
- CocosDenshion::SimpleAudioEngine::sharedEngine()-> preloadBackgroundMusic("Audio/Background/ChmpSlct_BlindPick.mp3");
- }
- //在完全进入这个场景后开始执行的事件
- void InverseWarsScene::onEnterTransitionDidFinish()
- {
- //完全进入场景后开始播放音乐
- CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("Audio/Background/ChmpSlct_BlindPick.mp3");
- }
0 0
- pushScene,popScene,replaceScen切换场景之间的区别
- cocos2dx replaceScene、popScene、pushScene的区别
- pushScene,popScene和runScene的区别
- cocos2dx学习之路----第五篇(切换场景的另一种方式:使用popScene与pushScene)
- cocos2dx如何添加popScene的场景动画
- cocos2dx如何添加popScene的场景动画
- replaceScene 和 pushScene及其popScene引用计数变化详解
- cocos2d-x中场景之间的切换
- cocos2d-x 2个场景之间的切换。
- UIView和Coco2d-x场景之间的相互跳转切换
- Ujnity 场景的切换
- 场景的切换
- 实现场景的切换
- 切换场景的动画
- 拦截器过滤器使用场景以及之间的区别
- Vuforia 在多次AR场景与非AR场景之间切换时可能会出现黑屏的解决方法
- unity的一个场景内,多个摄像机之间的切换。
- Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
- c++ 的前世今生
- 微软实习生第一题
- override 与overload 的区别
- Summation of Four Primes - PC110705
- 《C++ 沉思录》阅读笔记——句柄类
- pushScene,popScene,replaceScen切换场景之间的区别
- [LeetCode] ZigZag Conversion
- WebService学习(一)
- Ubuntu环境下配置J2EE开发环境jdk+tomcat+mysql+myeclipse
- 数位 dp HDU 2089 不要62
- JAVA的虚拟机
- Android Performance(7) Investigating Your RAM Usage
- c++单独编译和c++的多文件组织结构
- 什么是数据库