我在两个数组(displayGrid1和displayGrid2)的每个数组中都有一个编号为1200的CCSprites池。当展示墙壁或地板时,我将它们变为可见或不可见。地板具有许多不同的纹理,并且不依赖于z顺序。墙也有几个纹理,并且是z顺序依赖的。
我在移动时大约需要6到7帧,这是好的,因为它是一个基于转弯的等距流氓。但是,我也得到少量的闪烁,我认为这与性能有关,因为模拟器上没有闪烁。
我想提高效果。我正在考虑使用一个数组CCSpriteBatchNodes作为地板,它不依赖于z顺序,但我担心在这个数组的元素之间经常添加和删除精灵的成本,我认为这是必要的。
有人可以告诉我如何提高表现吗?
答案 0 :(得分:1)
正如评论中所提到的,你正在使用单独加载的多个小精灵文件,这会导致性能问题,因为浪费的内存被用于在每个精灵周围存储多余的像素数据。出于性能原因,OpenGL纹理中的每行像素数据必须具有总计2的幂的字节数。虽然我相信iOS下的OpenGL ES会自动执行此操作,但它可能会带来很大的性能影响。将精灵组合成一个正确大小的单个纹理可以为渲染性能带来巨大的好处。
您可以使用像Zwoptex这样的应用程序将所有这些较小的精灵文件分组为更大,更易于管理的精灵图纸/纹理图集,并为每个精灵图纸/纹理图集使用一个CCSpriteBatchNode。
Cocos2D非常支持将精灵表与纹理图集一起使用,并将代码转换为使用这些代码而不是单个文件可以轻松完成。从纹理图集创建单个精灵很简单,只需按名称而不是文件调用精灵。
CCSpriteBatchNodes组将OpenGL调用它们的精灵,这个过程称为批处理,这导致操作系统和OpenGL不得不减少到GPU的往返次数,极大地提高了性能。不幸的是,CCSpriteBatchNodes仅限于能够为支持它们的纹理绘制精灵(输入精灵表/纹理图集)。