Cocos2d和iPhone:具有多个纹理图集的视差背景可提供许多内存警告

时间:2012-06-14 23:19:02

标签: iphone ios performance cocos2d-iphone background-image

我想解决的问题是:

我有6个条纹,我需要以不同的速度移动。 2048 * 2048的纹理表是不够的,为了解决这个问题,我将图像分成了两个(上半部分和下半部分),因此每个条纹正好是960 * 640像素。通用算法是为每个条带分配上半部分和下半部分,并在每个帧处移动它们,确保在它们退出用户视图时将它们重新定位在屏幕顶部。我的类实现,ParallaxBackground in the ShootEmUp example from this book的直接修改,在使用Instruments运行和分析时会发出太多内存警告。见下面的分析:

OpenGL分析: OpenGL analysis

活动监控: Activity Monitor analysis

我担心的是两种分析中的大量内存警告(分别为24和5)。

编辑:您可以在下面找到解释解决方案的评论

3 个答案:

答案 0 :(得分:1)

2048x2048是新设备的最大纹理尺寸。你可以在Apple OpenGL ES Programming Guide

中阅读

答案 1 :(得分:1)

请记住,Cocos2D始终保存宽度/高度为2的幂的图像。因此,如果您的图像是960x640像素,它将使用内存,就像图像是1024x1024像素一样。

同时删除不再需要的纹理(以及调用outofmemory时)。

[[CCTextureCache sharedTextureCache] removeUnusedTextures];

您还可以使用质量较低的图像来节省内存。

[CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA4444];

每当您需要加载更高质量的图像或渐变时,您都可以将它放回去。

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

答案 2 :(得分:0)

根据LearnCocos2d对我的问题的评论建议,正确的答案解决方案是简单地重启设备..(参见上面的评论)。

谢谢!