您的位置:首页 > 移动开发 > Cocos引擎

Cocos2dx切换场景和资源崩溃的那些事

2015-06-17 17:14 288 查看
很多游戏开始开发的情况都是很简单, 让游戏跑起来

最后才考虑切换问题

假定A场景转B场景, 是一般不存在公共资源的, 这时候移除不必要的资源

CCSpriteFrameCache::sharedSpriteFrameCache()->purgeSharedSpriteFrameCache();
CCTextureCache::sharedTextureCache()->removeUnusedTextures();


但是如果是A转场A这样重复转场, 就没必要移除再加载这么麻烦了, 而这时候有可能会出现内容冲突问题

我写的游戏中用到了单例和事件, 这导致了问题的发生

首先一点. replaceScene执行之前, 并不会调用上一个场景onExit(), 这导致下一个场景初始化以后大概2秒后才会出现崩溃错误, 查了一下, onExit中需要卸载掉上一个场景的单例和事件, 这导致本场景刚刚创建的单例被移除, 从而发生崩溃

解决方案有几种, 而针对我的游戏已经开发许久, 内容结构已经固定, 除非使用卸载和再加载这种冗余拖延用户时间的方法, 其实可以在replaceScene前调用当前场景removeFromParent(), 这样就解决了基本问题.

测试了一下, onExit()被提前到下一个场景init()之前也就是提前到replaceScene前调用了, good job

很多时候, 都要考虑时序的问题, 这时候抓崩溃数据是很难还原真相的. 而只需要仔细观察对象的创建和释放, 就能很耗的找到规律, 当然, 对于游戏结构尽量少用单例(创建对象处理), 对于配置文件尽量少用宏定义(使用单例配置更灵活)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: