首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cocos2d闪烁

cocos2d闪烁
EN

Stack Overflow用户
提问于 2012-10-19 00:55:57
回答 1查看 299关注 0票数 1

我在两个数组displayGrid1和displayGrid2的每个数组中都有一个编号为1200的CCSprites池。在显示墙或楼板时,我会将它们设置为可见或不可见。地板有许多不同的纹理,并且不依赖于z顺序。墙还具有多个纹理,并且与z顺序相关。

我在移动时得到了大约6-7帧,这是可以的,因为它是一个基于等距流氓的回合。然而,我也得到了少量的闪烁,我认为这与性能有关,因为模拟器上没有闪烁。

我想提高性能。我正在考虑为楼层使用一个不依赖z顺序的数组CCSpriteBatchNodes,但我担心在这个数组的元素之间频繁地添加和删除sprites的成本,我认为这是必要的。

有没有人能建议我如何提高性能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-19 03:44:38

正如在注释中提到的,您正在使用多个单独加载的小sprite文件,这可能会导致性能问题,因为每个单独的sprite都会浪费内存来存储多余的像素数据。出于性能原因,OpenGL纹理中的每行像素数据必须具有总和为2的幂的字节数。尽管我相信iOS下的OpenGL ES会自动执行此操作,但它可能会对性能造成很大的影响。将精灵分组到一个大小正确的单个纹理中,可以极大地提高渲染性能。

您可以使用像Zwoptex这样的应用程序将所有这些较小的精灵文件分组到一个更大、更易于管理的精灵工作表/纹理图集中,并为每个精灵工作表/纹理图集使用一个CCSpriteBatchNode。

Cocos2D对使用带有纹理地图集的sprite sheets有很好的支持,并且可以很轻松地将代码转换为使用这些文件而不是单个文件。从纹理图集创建单独的精灵很容易,你只需按名称调用精灵,而不是从文件中调用。

CCSpriteBatchNodes组OpenGL调用他们的精灵在一起,这一过程称为批处理,这使得操作系统和OpenGL必须进行更少的往返到图形处理器,从而极大地提高了性能。不幸的是,CCSpriteBatchNodes仅限于能够为其背后的纹理绘制精灵(进入精灵工作表/纹理地图集)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12959817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档