cocos2d开发学习四:场景过渡效果,以及过渡场景的作用
2012-07-18 09:24
489 查看
前面我们也提到,其实游戏场景是个抽象概念,
对于场景的一些内容和需要学习,最基本就是掌握他对整个游戏流程的控制和影响
这边是我大致罗列的关于场景的三个要点
1.多场景结构
2.场景切换的过渡动画
3.过渡场景的作用。
一:多场景
对于第一点,其实没什么说的,就是在一个游戏中我们可能运用多个场景,
更好的展现游戏逻辑
二:场景切换过渡效果
场景过渡效果cocos2d提供了CCTransitionScene类
追踪下Node中几个方法
tips:1.如果你想在覆写以上几个方法时,不能忘了调用super方法。
2.上面的四句log,只是我们只是追踪了A场景跳转到B场景时,A对这4个方法的log,
如果我们打印出B场景这4个方法,则会发现b的init,onEnter方法执行都比A的onExit在前,A的dealloc方法是在最后执行了,这也就是一直说的场景转换前内存会突然彪起来的问题,前者还没没有dealloc,后者已经init,初始化各种内存了。
资料上在A的onExit方法中可以尽可能多的释放内存A占用的内存空间。
在B场景的中,各种节点内存的分配尽可能放在onEnterTransitionDidFinish(打印可以看到该方法执行在A的onExit)之后但是这个还是需要和前者的onExit配合,如果前者没有在onExit中执行更多内存释放,那么其实最后A内存的释放还是在dealloc中,而A的delloc还是在B的onEnterTransitionDidFinish后面,那么一点意义也没有~
资料上也提到用个预约方法来调节此间的过渡时间。
场景的过渡效果只是说添加一个场景转换效果,提供更柔和的视觉效果。
三。过渡场景的应用
过渡场景的最核心的作用我觉得有两点
1.防止两个场景切换时,新场景需要加载内容过多造成的延时和卡顿现象。(这个很好理解,就比如玩魔兽世界读进度条场景界面的概念~)
2.优化场景切换的内存作用。简单来说,就是比如A场景是内存占了100mb,转换到B场景时,B场景需要内存也是100mb,因为我们知道在场景转换是,A场景的内存释放是在B场景加载之前,那么此间内存可能到达200mb峰值,诺是添加进过渡场景tempScene,temp需要的内存是10mb(因为基本只是一个加载进度条么),那么A->temp->B,内存的峰值就可降到110mb。
更多内容可以参考上传的那个学习教程电子书。
注意几点:
1.因为现在cocos2d-iPhone已经更新到2.+上部分类改动
比如: CCLabel被CCLabelTTF替代。
CCSlideInBTransition变成了CCTransitionSlideInT
还有部分类名改动~
对于场景的一些内容和需要学习,最基本就是掌握他对整个游戏流程的控制和影响
这边是我大致罗列的关于场景的三个要点
1.多场景结构
2.场景切换的过渡动画
3.过渡场景的作用。
一:多场景
对于第一点,其实没什么说的,就是在一个游戏中我们可能运用多个场景,
更好的展现游戏逻辑
二:场景切换过渡效果
场景过渡效果cocos2d提供了CCTransitionScene类
追踪下Node中几个方法
-(void)onEnter { /*init后会调用; 若是加了CCTransitionScene后,在过渡场景开始后调用 */ [super onEnter]; CCLOG(@"执行了~~onEnter"); } - (void)onEnterTransitionDidFinish { /*onEnter以后将会调用此方法 若使用CCTransitionScene,将会在过渡效果结束以后调用此方法 */ [super onEnterTransitionDidFinish]; CCLOG(@"执行了~~onEnterTransitionDidFinish"); } - (void)onExitTransitionDidStart { CCLOG(@"执行了~~onExitTransitionDidStart"); [super onExitTransitionDidStart]; } - (void)onExit { // 节点调用dealloc方法之前将会调用此方法 //如果使用了CCTransitionScene,将会在过渡效果结束以后调用此方法 CCLOG(@"执行了~~onExit"); [super onExit]; }然后执行时的调用
2012-07-17 16:45:32.893 LoadingSim[2896:1be03] 执行了~~onEnter 2012-07-17 16:45:32.893 LoadingSim[2896:1be03] 执行了~~onEnterTransitionDidFinish 2012-07-17 16:45:37.928 LoadingSim[2896:1be03] 执行了~~onExitTransitionDidStart 2012-07-17 16:45:42.958 LoadingSim[2896:1be03] 执行了~~onExit
tips:1.如果你想在覆写以上几个方法时,不能忘了调用super方法。
2.上面的四句log,只是我们只是追踪了A场景跳转到B场景时,A对这4个方法的log,
如果我们打印出B场景这4个方法,则会发现b的init,onEnter方法执行都比A的onExit在前,A的dealloc方法是在最后执行了,这也就是一直说的场景转换前内存会突然彪起来的问题,前者还没没有dealloc,后者已经init,初始化各种内存了。
资料上在A的onExit方法中可以尽可能多的释放内存A占用的内存空间。
在B场景的中,各种节点内存的分配尽可能放在onEnterTransitionDidFinish(打印可以看到该方法执行在A的onExit)之后但是这个还是需要和前者的onExit配合,如果前者没有在onExit中执行更多内存释放,那么其实最后A内存的释放还是在dealloc中,而A的delloc还是在B的onEnterTransitionDidFinish后面,那么一点意义也没有~
资料上也提到用个预约方法来调节此间的过渡时间。
场景的过渡效果只是说添加一个场景转换效果,提供更柔和的视觉效果。
三。过渡场景的应用
过渡场景的最核心的作用我觉得有两点
1.防止两个场景切换时,新场景需要加载内容过多造成的延时和卡顿现象。(这个很好理解,就比如玩魔兽世界读进度条场景界面的概念~)
2.优化场景切换的内存作用。简单来说,就是比如A场景是内存占了100mb,转换到B场景时,B场景需要内存也是100mb,因为我们知道在场景转换是,A场景的内存释放是在B场景加载之前,那么此间内存可能到达200mb峰值,诺是添加进过渡场景tempScene,temp需要的内存是10mb(因为基本只是一个加载进度条么),那么A->temp->B,内存的峰值就可降到110mb。
更多内容可以参考上传的那个学习教程电子书。
注意几点:
1.因为现在cocos2d-iPhone已经更新到2.+上部分类改动
比如: CCLabel被CCLabelTTF替代。
CCSlideInBTransition变成了CCTransitionSlideInT
还有部分类名改动~
相关文章推荐
- .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
- cocos2d开发学习一:开发环境搭建以及入门学习资源
- 【Cocos2d-X开发学习笔记】第17期:动作类之跟随动作、可调整速度动作以及动作延时的使用
- .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
- cocos2d-x场景切换与过渡效果
- Cocos2d-x游戏开发——场景切换效果
- cocos2d-x开发记录:二,基本概念(导演,场景,层和精灵,场景切换,效果)
- Learning Cocos2d-x for WP8(6)——场景切换和场景过渡效果
- 【Cocos2D-X游戏开发笔记2】自定义场景及场景切换效果
- 【Cocos2d-X开发学习笔记】第18期:动作类之改变动作对象、函数回调动作以及过程动作的使用
- 【Cocos2d-X开发学习笔记】第04期:渲染框架之场景类(CCScene)的使用
- 【Cocos2d-X开发学习笔记】第04期:渲染框架之场景类(CCScene)的使用
- ios开发学习--cocos2d(cocos2d)效果源码分享--系列教程
- 【Cocos2d-X开发学习笔记】第18期:动作类之改变动作对象、函数回调动作以及过程动作的使用
- ios开发学习--cocos2d(cocos2d)效果源码分享--系列教程
- cocos2d-x学习之场景间切换效果
- cocos2d开发学习一:开发环境搭建以及入门学习资源
- cocos2d-x场景切换与过渡效果
- ios开发学习--cocos2d(cocos2d)效果源码分享--系列教程
- Learning Cocos2d-x for XNA(6)——场景切换和场景过渡效果