1

我正在 cocos2d 中开发应用程序。该应用程序的架构非常简单:主菜单,您可以从中选择六个子菜单中的一个。点击子菜单启动后。在主菜单中,在加载所有纹理后,在 Retina iPad 上需要大约 408 MB(最大 450MB,因为我使用 removeUnusedTextures 方法),有很多高分辨率纹理(对于 Retina iPad)。

现在我有两种优化纹理的方案:

首先:我在应用程序开始时以及当他们需要其他纹理时加载最少的纹理集。

缺点:当应用程序加载纹理时,它会冻结片刻以从磁盘加载数据。无法使用 GCD 加载纹理,因为并非所有 cocos2d 类都是线程安全的,而且 cocos 抱怨所有纹理没有使用相同的 id( CCSprite is not using the same texture id)。(注意:我正在加载 *.pvr.ccz 文件使用CCSpriteBatchNode

第二: 在场景开始时加载所有纹理。

缺点:当在内存中切换一段时间的场景时,有来自两个场景的资源(菜单和子菜单,尤其是从子菜单回到主菜单时)。由于内存增长到 600MB,iOS 杀死了应用程序,崩溃,世界末日。

如何解决这个问题?我试图在互联网上找到一些东西,但没有运气。

PS 我使用 TexturePacker 尽可能地优化纹理。

4

1 回答 1

1

为了避免内存中的两个场景问题,您可以简单地在中间添加一个间歇(加载)场景,除了显示“加载”文本或图形之外什么都不做。当您切换到加载场景时,旧场景有时间在加载下一个场景之前释放。

您还可以通过将颜色深度从 32 位降低到 16 位,将纹理内存使用量减半。特别是在 Retina 图像上,即使不是不可能,也很难分辨出适当的颜色抖动的差异。

您还可以使用 CCTextureCache 的 loadImageAsync 方法在后台加载纹理。但是您仍然必须等待纹理加载,然后才能使用该纹理创建精灵,因此您并没有真正赢得任何东西。

于 2013-10-05T09:24:14.233 回答