【问题标题】:Efficient frame-by-frame animations in Cocos2d for iPhoneCocos2d for iPhone 中高效的逐帧动画
【发布时间】:2012-12-03 22:26:54
【问题描述】:

我的 cocos2d iPhone 游戏中有一些动画精灵。动画精灵是指运行 CCRepeatForever 动作的 CCSprite。重复动作循环通过来自 png spritesheet 和相关 plist 坐标文件的动画帧。

虽然我只有几个独特的动画,但我有许多具有相同动画的动画精灵。例如,我可能有 30 个动画足球运动员在屏幕上跑来跑去,他们都在运行 CCRepeatForever 动作。 在这种情况下,预加载和重用动画的有效方法是什么?

我目前的方法是在游戏启动时创建重复动作。然后,当我想创建一个新的动画精灵时,我会在精灵上运行预加载的重复动作的副本。我质疑这是否非常有效,因为动画有时会在启动时结结巴巴。非常感谢所有反馈!我对几乎任何架构/设置都持开放态度。

编辑 - 更多信息:我想知道“预复制”这些操作是否可行?当游戏加载时,我会用重复动作的副本填充队列。然后我会根据需要将它们弹出。当队列的大小低于某个阈值时,我会在后台线程上重新填充它。

【问题讨论】:

    标签: ios animation memory-management cocos2d-iphone


    【解决方案1】:

    确保您使用的是纹理图集,并预加载所有带有动画的纹理。理想情况下,您会希望使用 .pvr.ccz 格式,因为它的加载速度比 PNG 快得多。

    您所做的所有其他事情可能对帧率几乎没有影响。卡顿很可能是由按需加载纹理引起的,或者与音频缓冲区有关(即在没有预加载的情况下播放音频)。

    不用担心使用 CCAnimate 和您正在使用的任何其他工具优化 CCRepeatForever 的(频繁)创建,除非您已运行分析器来测量并确认这正是您遇到的问题有。我有 99.9% 的把握认为口吃问题与创建和运行操作无关。

    加载资源是迄今为止您在游戏过程中可以运行的最耗时的任务,因此预加载所有资源文件至关重要。在你的情况下,你真的只需要确保纹理在内存中。

    【讨论】:

    • +1 为 pvr.ccz。我在某些设备上测得快了 10 倍,从字面上消除了预加载的需要,因为动画加载速度足够快,在地图上的实际角色运动中不会被注意到。另一个好处是您可以“缩小”应用程序的大小。
    【解决方案2】:

    对于逐帧动画,请使用 CCAnimation 和 CCAnimationCache。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多