我希望其他人经历过这种情况并随后找到解决方案,因为我正沮丧地点燃自己的头发。
简单地说,我正在使用 XCode 3.2.6 和 SDK 4.2 创建一个 Cocos2D 应用程序。我使用了两台设备进行测试:iPhone 3GS 和 iPhone 4,我相信都是 IOS 4.2。在任一设备上进行测试时,我都获得了稳定的 60 FPS 性能。
当我升级到 XCode 4.2 时,灾难首先发生。我可以毫不费力地将我的项目直接打开到这个新版本中并运行它。一切都一样,除了我现在在 XCode 4.2 中。令我震惊和恐惧的是,我发现我现在的 FPS 在 45 到 50 范围内,有时会下降到 30 年代,以前从未发生过这种情况。
此时我决定升级到 Lion、XCode 4.3 和 SDK 5.1。不幸的是,这并没有改变什么。
然后我将两部手机都升级到了最新的 IOS,但性能问题仍然存在。
最后,我升级到了最新版本的 Cocos2D,但无济于事。
我已经尝试了许多涉及发布与调试模式、编译器设置等的补救措施。没有任何帮助。
我发现了一些可能是暗示的东西,但目前我对 Open GL ES 的了解还不够,因此无法理解。在另一个论坛上,有人抱怨同样的问题,并说如果他们禁用顶点缓冲区对象 (VBO) 支持,问题就解决了。我发现在 Cocos2D 中启用了它,禁用了它,令我惊讶的是,我恢复到了 60 FPS。该应用程序的性能不如在 XCode 3.2.6 下编译时那样强大,但在 XCode 4.3 下禁用 VBO 支持时性能要好得多。这样做的问题是不建议禁用 VBO 支持,因为它会在启用时提高性能。
我所做的一些测试似乎表明图形是问题所在。当应用程序确实下降到 45 FPS 范围时,我所拥有的只是 12 到 20 个精灵在屏幕上移动。如果我删除这些精灵并让其他一切继续运行,我会回到 60 FPS,即使启用了 VBO。当我在 XCode 3.2.6 下开发时,我有时会有 100 多个精灵在移动(无论是在视图中还是在视图外),并且 FPS 保持在 60。
所以简而言之(抱歉,为时已晚),有没有人知道完全相同的代码在通过 XCode 3.2.6 编译时如何运行得很好,但在 XCode 4.3 下却很糟糕?我尝试了许多不同的编译器设置都无济于事。我的猜测是某处有一些简单的设置可能默认为 XCode 3 和 XCode 4 之间的不同值。
我很绝望,所以请传递您可能有的任何想法。
谢谢!