Cocos2d游戏在一次加载许多.plist时崩溃

时间:2011-07-08 09:12:03

标签: iphone cocos2d-iphone

我目前正在使用的iphone游戏是使用cocos2d开发的。游戏因错误而崩溃:

  

程序收到0,数据格式化,调试无法继续......

经过一些研究后我发现它的内存不足。我得到了:

  

收到内存警告。等级= 1等。

问题的根源似乎是plists文件的加载。它使用4.0 MB来加载大约23个.plist文件来运行不同的动画。 enter image description here

我想知道如何加载一堆运行不同动画的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

2 个答案:

答案 0 :(得分:0)

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
//[[CCDirector sharedDirector] purgeCachedData];
}

尝试注释掉purgeCachedData,并在退出gameScene时调用它

答案 1 :(得分:0)

对于addSpriteFramesWithFile的每次调用,Cocos2d都会加载相关的图像文件(.png),并且您似乎拥有相当多的精灵表。我将假设这些表中的每一个都不是很大,因为显然加载这么多大纹理会产生内存警告。

你应该将较小的精灵表合并到一个或多个较大的精灵表中,因为加载多个纹理仍然会受到惩罚,这在内部将最终填充到二维的下一个最大功率。更不用说在绘图过程中减少纹理切换带来的性能节省。

另请注意,您对applicationDidReceiveMemoryWarning的更改并不会阻止Cocos2d删除纹理,您还需要注释掉removeAllTextures的调用以便对其进行测试。