在游戏中,假设这些纹理用于动画(每个纹理是动画的帧).当然,每个使用4MB的30个纹理对动画的速度不是很快,并且内存消耗远不能接近可接受的水平.
因此,作为OpenGL ES和Cocos2d的新手,我正在寻找食谱如何优化这些特定的纹理和纹理.
关于我应该处理的纹理的其他信息:所有纹理具有相同的渐变背景(海面)和不同的区域(波浪).每一波都有些独特,波浪占据了几乎所有的纹理.纹理从Flash导出(它们最初是矢量图像).
解决方法
您必须经常加载和卸载纹理,同时设置动画以保持内存消耗.这将限制动画的可实现帧率.我怀疑它在iPad和第4代设备上最多只能是30-40 fps,在第1代到第3代设备上可能会非常慢.
您可以做的最佳优化是不使用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导出的全屏纹理(真的很糟糕),至少尝试使用cocos2d的Flash时间轴动画导入器>使用cocos2d功能动画的单个图像>使用纹理图集(和精灵批处理)来减少内存消耗,提高速度>尽可能减少颜色位深度,再次减少内存速度>使用有损压缩格式PVR实现快速/始终运动的图像>使用较小的图像并进行缩放
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。