我目前正在使用的iphone游戏是使用cocos2d
开发的。游戏因错误而崩溃:
程序收到0,数据格式化,调试无法继续......
经过一些研究后我发现它的内存不足。我得到了:
收到内存警告。等级= 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
答案 0 :(得分:0)
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
//[[CCDirector sharedDirector] purgeCachedData];
}
尝试注释掉purgeCachedData,并在退出gameScene时调用它
答案 1 :(得分:0)
对于addSpriteFramesWithFile
的每次调用,Cocos2d都会加载相关的图像文件(.png),并且您似乎拥有相当多的精灵表。我将假设这些表中的每一个都不是很大,因为显然加载这么多大纹理会产生内存警告。
你应该将较小的精灵表合并到一个或多个较大的精灵表中,因为加载多个纹理仍然会受到惩罚,这在内部将最终填充到二维的下一个最大功率。更不用说在绘图过程中减少纹理切换带来的性能节省。
另请注意,您对applicationDidReceiveMemoryWarning
的更改并不会阻止Cocos2d删除纹理,您还需要注释掉removeAllTextures
的调用以便对其进行测试。