Cocos2dx切换场景和资源崩溃的那些事
2015-06-17 17:14
288 查看
很多游戏开始开发的情况都是很简单, 让游戏跑起来
最后才考虑切换问题
假定A场景转B场景, 是一般不存在公共资源的, 这时候移除不必要的资源
但是如果是A转场A这样重复转场, 就没必要移除再加载这么麻烦了, 而这时候有可能会出现内容冲突问题
我写的游戏中用到了单例和事件, 这导致了问题的发生
首先一点. replaceScene执行之前, 并不会调用上一个场景onExit(), 这导致下一个场景初始化以后大概2秒后才会出现崩溃错误, 查了一下, onExit中需要卸载掉上一个场景的单例和事件, 这导致本场景刚刚创建的单例被移除, 从而发生崩溃
解决方案有几种, 而针对我的游戏已经开发许久, 内容结构已经固定, 除非使用卸载和再加载这种冗余拖延用户时间的方法, 其实可以在replaceScene前调用当前场景removeFromParent(), 这样就解决了基本问题.
测试了一下, onExit()被提前到下一个场景init()之前也就是提前到replaceScene前调用了, good job
很多时候, 都要考虑时序的问题, 这时候抓崩溃数据是很难还原真相的. 而只需要仔细观察对象的创建和释放, 就能很耗的找到规律, 当然, 对于游戏结构尽量少用单例(创建对象处理), 对于配置文件尽量少用宏定义(使用单例配置更灵活)
最后才考虑切换问题
假定A场景转B场景, 是一般不存在公共资源的, 这时候移除不必要的资源
CCSpriteFrameCache::sharedSpriteFrameCache()->purgeSharedSpriteFrameCache(); CCTextureCache::sharedTextureCache()->removeUnusedTextures();
但是如果是A转场A这样重复转场, 就没必要移除再加载这么麻烦了, 而这时候有可能会出现内容冲突问题
我写的游戏中用到了单例和事件, 这导致了问题的发生
首先一点. replaceScene执行之前, 并不会调用上一个场景onExit(), 这导致下一个场景初始化以后大概2秒后才会出现崩溃错误, 查了一下, onExit中需要卸载掉上一个场景的单例和事件, 这导致本场景刚刚创建的单例被移除, 从而发生崩溃
解决方案有几种, 而针对我的游戏已经开发许久, 内容结构已经固定, 除非使用卸载和再加载这种冗余拖延用户时间的方法, 其实可以在replaceScene前调用当前场景removeFromParent(), 这样就解决了基本问题.
测试了一下, onExit()被提前到下一个场景init()之前也就是提前到replaceScene前调用了, good job
很多时候, 都要考虑时序的问题, 这时候抓崩溃数据是很难还原真相的. 而只需要仔细观察对象的创建和释放, 就能很耗的找到规律, 当然, 对于游戏结构尽量少用单例(创建对象处理), 对于配置文件尽量少用宏定义(使用单例配置更灵活)
相关文章推荐
- cocos2d-x类型转换(CCstring int string char UTF-8互转)
- cocoStudio: Button三种状态切换
- cocos2d-x2.2.3和android平台环境的搭建
- cocos2d-x-2.2.3和vs2012环境配置
- cocos2d-x安装
- cocos2dx lua 接微博SDK(三)--获取用户信息,好友信息
- (转)像素完美碰撞检测(使用cocos2d-x)
- 解决cocos2dx在Xcode中运行时报:convert: iCCP: known incorrect sRGB profile 的问题
- quick-cocos2d-x游戏开发——StateMachine状态机
- Cocos2d-x 2.2.2版本CCEditbox 遇到的bug
- cocos2d 2.2.6 win7下的配置
- cocos2dx 常见的49中动作
- Cocos2d-x的学习之旅(六)输入框
- cocos2dx的内存管理机制
- Cocos2d-x 3.x学习笔记(一):开始Cocos2d之旅
- Cocos2d-x 3.0坐标系详解
- COCOS2DX坐标系(下)
- cocos2d-x3.3获取时间
- 最新Cocos2d-x3.2开发环境搭建(windows环境下)
- Windows VS下搭建cocos2d-x环境搭建