0

我正在开发一个启用视网膜的 cocos2d 游戏。我在我的项目中为视网膜和非视网膜添加了很多图像。游戏在模拟器 [Retina 和非 Retina] 中运行良好,并且在非 Retina 设备中也能完美运行。但是,当我在启用视网膜的设备中运行相同的设备时,意味着它会崩溃而没有显示任何消息。当我使用仪器应用程序测试我的游戏时,意味着它会显示像这样的低内存警告消息 [http://screencast.com/t/sfRDTELrhomC]。当应用程序崩溃在启用视网膜的设备中运行时,它不会在控制台中显示任何错误消息。我对目前的状态感到非常困惑,谁能帮我解决这个问题。

4

1 回答 1

0

您可能正在使用大量内存来加载图像,因此设备内存不足并终止了您的应用程序。

我猜你正在使用 PNG(因为你没有提供任何信息);当您从 PNG、JPG 等加载图像时,图像会两次加载到内存中,因为它必须由 cocos “翻译”成纹理。此外,此操作的纹理大小必须是 2 的幂,因此 150x150 的图像将占用 256x256 图像的内存。这是很多浪费的内存。

我的第一个建议是购买 Texture Packer(我与他们没有任何关系,它只是一个很棒的软件),它将您的图像制作成一个压缩的 PVR 精灵表,其中包含多个图像在一个纹理中。

PVR 文件直接加载到纹理中,因此它们不使用双倍内存,并且由于它们是精灵表,因此浪费的像素更少。

我的第二个建议是,在加载图像时,不要在运行循环的同一滴答声中完成所有操作;Cocos 使用了很多 autoreleases,并且直到 tick 结束时内存才会被清除,所以不要在同一个方法中一次将所有图像加载到内存中,而是安排该方法多次调用并每次加载一个新文件.

于 2012-09-04T09:02:45.707 回答