我在两个数组displayGrid1和displayGrid2的每个数组中都有一个编号为1200的CCSprites池。在显示墙或楼板时,我会将它们设置为可见或不可见。地板有许多不同的纹理,并且不依赖于z顺序。墙还具有多个纹理,并且与z顺序相关。
我在移动时得到了大约6-7帧,这是可以的,因为它是一个基于等距流氓的回合。然而,我也得到了少量的闪烁,我认为这与性能有关,因为模拟器上没有闪烁。
我想提高性能。我正在考虑为楼层使用一个不依赖z顺序的数组CCSpriteBatchNodes,但我担心在这个数组的元素之间频繁地添加和删除sprites的成本,我认为这是必要的。
有没有人能建议我如何提高性能?
发布于 2012-10-19 03:44:38
正如在注释中提到的,您正在使用多个单独加载的小sprite文件,这可能会导致性能问题,因为每个单独的sprite都会浪费内存来存储多余的像素数据。出于性能原因,OpenGL纹理中的每行像素数据必须具有总和为2的幂的字节数。尽管我相信iOS下的OpenGL ES会自动执行此操作,但它可能会对性能造成很大的影响。将精灵分组到一个大小正确的单个纹理中,可以极大地提高渲染性能。
您可以使用像Zwoptex这样的应用程序将所有这些较小的精灵文件分组到一个更大、更易于管理的精灵工作表/纹理图集中,并为每个精灵工作表/纹理图集使用一个CCSpriteBatchNode。
Cocos2D对使用带有纹理地图集的sprite sheets有很好的支持,并且可以很轻松地将代码转换为使用这些文件而不是单个文件。从纹理图集创建单独的精灵很容易,你只需按名称调用精灵,而不是从文件中调用。
CCSpriteBatchNodes组OpenGL调用他们的精灵在一起,这一过程称为批处理,这使得操作系统和OpenGL必须进行更少的往返到图形处理器,从而极大地提高了性能。不幸的是,CCSpriteBatchNodes仅限于能够为其背后的纹理绘制精灵(进入精灵工作表/纹理地图集)。
https://stackoverflow.com/questions/12959817
复制相似问题