第一条建议:改变设计。如果不是你的,必要时使用钝力。这很难很好地工作。
您将不得不经常加载和卸载纹理,同时动画检查内存消耗。这将限制动画的可实现的帧率。我猜想在iPad和第四代设备上它最多只能达到30-40fps,可能会在第一代到第三代设备上放缓。
您可以做的最佳优化是不使用Flash导出的全屏纹理。基本上Flash所做的是为你制作一切动画,然后为每个动画帧输出一个全屏图像。 这是为移动设备设置动画效果最差的解决方案。
取而代之的是,使用单独的图像和cocos2d动作重新创建cocos2d中的所有动画以组成相同的动画或足够接近的动画。这是更多的编码工作,但它会表现得更好。可能有像LevelHelper这样的工具可以帮助您,但我不确定他们是否可以向您展示动画的实时预览。还有一个tool that can import Flash timeline animations,但我不能说它有多好,或者它是否工作。
使用Texture Packer可以从各个图像创建纹理图集,以节省内存并加速渲染速度,尤其是与CCSpriteBatchNode结合使用。 Plus Texture Packer允许您使用各种纹理格式进行试验,如果您想支持非Retina设备,它将导出SD分辨率图像。
因为另一个好的优化是尽可能地减少颜色位深度。如果你从32位到16位(RGBA4444或RGBA5551或RGB565,取决于你需要什么样的透明度),你已经将内存消耗减少了一半,渲染速度也提高了一些。
如果可能,请使用PVR压缩格式之一,特别是对于总是移动的精灵来说,因为降级的图像质量几乎不可能注意到移动的精灵。
但是,由于您提到了渐变效果,那么受缩小的颜色位深度影响最大。如果是简单渐变,则可以用CCLayerGradient替换渐变背景以保存背景图像的内存。
最后,您可以使用较小的图像并将其放大。特别是对于透明图像,缩放图像会使图像看起来模糊的事实实际上是有益的。
总结:
- 不使用由Flash(非常糟糕的主意)出口全屏纹理,至少是尝试的Flash时间轴动画进口商对cocos2d的
动画
- 使用个人图像与cocos2d的功能
- 使用纹理地图集(和sprite批处理)来减少内存消耗,提高速度
- 尽可能减少颜色位深度,再次减少内存更多的速度
- 实验的有损压缩格式PVR快速/总运动图像
- 使用更小的图像,并加以推广
谢谢你的宝贵意见。以上所有都很有意义。目前,我决定放弃导出的纹理,并尝试优化动画部分的大小和位深度。 – Bobrovsky