一次加载多个 .plist 时 Cocos2d 游戏崩溃
Posted
技术标签:
【中文标题】一次加载多个 .plist 时 Cocos2d 游戏崩溃【英文标题】:Cocos2d game crashes when loading many .plist at a time 【发布时间】:2011-07-08 09:12:03 【问题描述】:我目前正在使用的 iphone 游戏是使用 cocos2d
开发的。游戏因错误而崩溃:
Program received 0, Data Formatters, Debugging cannot continue……
在做了一些研究后,我发现它的内存不足。我得到了:
收到内存警告。 Level=1 等。
问题的根源似乎是加载 plists 文件。它仅使用 4.0 MB 来加载大约 23 个 .plist 文件来运行不同的动画。
我想知道如何加载一堆运行不同动画的 plist 文件。该图像是加载 plist 文件及其内存使用情况的代码截图。我使用仪器来获得这个结果。
进一步调试这里是我得到的汇编代码
pop r4, r5, r7, pc
adds r0, #100 ; 0x64
lsls r3, r1, #0
--Error--
lsls r2, r1, #0
add r7, sp, #720
lsls r4, r1, #0
cbz r4, <0x7a>
lsls r4, r1, #0
【问题讨论】:
【参考方案1】:- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
//[[CCDirector sharedDirector] purgeCachedData];
尝试注释掉 purgeCachedData,并在退出游戏场景时调用它
【讨论】:
我已经评论过了......这就是我的样子 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application [[CCTextureCache sharedTextureCache] removeAllTextures]; NSLog(@"删除缓存数据----------"); //[[CCDirector sharedDirector] purgeCachedData]; 我刚刚尝试在游戏结束时添加 purgeCachedData...程序崩溃并显示相同的错误消息。内存警告等【参考方案2】:对于addSpriteFramesWithFile
的每次调用,Cocos2d 都会加载相关的图像文件(.png),并且您似乎有相当多的精灵表。我将假设这些表中的每一个都不是很大,因为显然加载这么多大的纹理会产生内存警告。
您应该将较小的 sprite sheet 组合成一个或多个较大的 sprite sheet,因为加载多个纹理仍然会受到惩罚,这些纹理最终会在内部被填充到二维的下一个最高幂。更不用说在绘制过程中减少纹理切换所带来的性能节省。
还请注意,您对applicationDidReceiveMemoryWarning
的更改不会阻止Cocos2d 删除纹理,您还需要注释掉对removeAllTextures
的调用以进行测试。
【讨论】:
以上是关于一次加载多个 .plist 时 Cocos2d 游戏崩溃的主要内容,如果未能解决你的问题,请参考以下文章