ios - cocos2d闪烁

标签 ios xcode cocos2d-iphone

我在两个数组 displayGrid1 和 displayGrid2 中都有一个编号为 1200 的 CCSprite 池。在显示墙壁或地板时,我将它们变为可见或不可见。地板有许多不同的纹理并且不依赖于 z 顺序。墙壁也有多种纹理,并且依赖于 z 顺序。

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

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

有人可以建议我如何提高性能吗?

最佳答案

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

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

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

CCSpriteBatchNodes 将 OpenGL 对其 sprite 的调用组合在一起,这一过程称为批处理,这会导致操作系统和 OpenGL 不得不减少与 GPU 的往返次数,这大大提高了性能。不幸的是,CCSpriteBatchNode 仅限于为支持它们的纹理绘制 Sprite (输入 Sprite 表/纹理图集)。

关于ios - cocos2d闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959817/

相关文章:

ios - 来自不同状态的颜色的 UIButton 背景图像

ios - 编程约束 - 使用布局 anchor 覆盖整个父 View

android - 圆形图像切割形式所有侧面

iphone - 如何在cocos2d中使 Sprite 不断前进?

objective-c - 使用 Box2D 将 UIImage 添加到 CCSprite

ios - 动态移动Xamarin.Forms条目

ios - 在 Core Data 上创建关键字结构并搜索那个大动物

xcode - 有没有办法在发送电子邮件时忽略iOS设备中邮件应用程序中保存的电子邮件?

objective-c - 切换到 Xcode 8.2.1 导致 BRCloudDocsErrorDomain

ios - 如何判断我的应用程序正在使用什么 appid