我想解决的问题是:
我有6个条纹,我需要以不同的速度移动。 2048 * 2048的纹理表是不够的,为了解决这个问题,我将图像分成了两个(上半部分和下半部分),因此每个条纹正好是960 * 640像素。通用算法是为每个条带分配上半部分和下半部分,并在每个帧处移动它们,确保在它们退出用户视图时将它们重新定位在屏幕顶部。我的类实现,ParallaxBackground in the ShootEmUp example from this book的直接修改,在使用Instruments运行和分析时会发出太多内存警告。见下面的分析:
OpenGL分析:
活动监控:
我担心的是两种分析中的大量内存警告(分别为24和5)。
编辑:您可以在下面找到解释解决方案的评论
答案 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对我的问题的评论建议,正确的答案解决方案是简单地重启设备..(参见上面的评论)。
谢谢!