【问题标题】:How to remove stutter in a cocos2d running game?cocos2d运行游戏中如何消除口吃?
【发布时间】:2013-01-14 08:06:59
【问题描述】:

我正在构建一个 cocos2d 连续运行的 ios 游戏,其中一个角色被动画化以穿过一个场景。背景、角色脚下的地面和奔跑角色身后的栅栏以相反的方向移动以模拟向前运动。角色本身被动画化以在原地运行。偶尔会有额外的精灵在场景中移动。

我所有的动作(除了角色的原地动画)都发生在更新方法中。

我注意到,当其他精灵移动经过场景时,所有移动部件都会结结巴巴。当没有额外的精灵时,口吃就会消失。

我还注意到,在 ipad 3 (ios 6.0.1) 中几乎察觉不到口吃,而在 iphone 3gs (ios 6.0.1) 和 ipad 1 (ios 5.1.1) 中最为明显,而且中等程度在 iphone 4 (ios 6.0.1) 上很明显。

我不知道从哪里开始解决这个问题 - 我尝试移除额外精灵的实际渲染,并且我还尝试移除角色后面的栅栏 - 但没有任何更改对口吃产生任何影响。

有什么建议吗?

更新:通过运行时间分析器修复它,如下面的@Fogmeister 建议的那样。原来我在每次更新时都在做磁盘 i/o 以查找一些状态变量。我优化了它,所有设备上的口吃都消失了。谢谢!

【问题讨论】:

    标签: ios animation cocos2d-iphone


    【解决方案1】:

    您需要确定是什么占用了代码中的时间并导致卡顿。

    这似乎只是一个优化问题,因为您可以在较旧、较慢的设备上看到更多的卡顿,而在功能更强大的新设备上则更少。

    使用 Time Profiler 工具分析应用程序。这将告诉您时间花费在哪里,并几乎立即将您指向花费时间的函数(如果不是行)。

    一旦发现可以开始优化。

    【讨论】:

    • 谢谢,有帮助!我通过运行时间分析器发现了问题。我在每次可以优化的更新上都进行磁盘 I/O。
    • 别担心,乐于助人。
    【解决方案2】:

    您的精灵移动代码是什么?如果您在 -(void) update:(ccTime) delta {} 方法中手动更新位置,请确保将每个移动乘以 delta 以解决任何微小的帧率波动。

    【讨论】:

    • 谢谢,我根据@Fogmeister 的建议修复了它。请参阅上面的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多