ios - Cocos2d for iPhone 中高效的逐帧动画

标签 ios animation memory-management cocos2d-iphone

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

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

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

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

最佳答案

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

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

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

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

关于ios - Cocos2d for iPhone 中高效的逐帧动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903766/

相关文章:

ios - 在 SwiftUI 中动态创建列表部分

ios - 如何在 Swift 的 textView 中突出显示文本?

javascript - 使用 WebGL 和 three.js 的运动模糊

c# - 如何在 C# windows 窗体应用程序中创建平滑的形状动画移动?

iphone - 如果我不再使用 MKMapView,为什么在释放它后我会崩溃?

iphone - iPhone 上的视频卡拉 OK 开发

objective-c - 滚动到底部时向 UITableView 添加行

android - 等待 Android 动画完成

memory-management - 如何在带有动态库的程序中使用 tcmalloc

c - 重写一段已编译的 C 程序