【问题标题】:When and when not to use CoreAnimation何时以及何时不使用 CoreAnimation
【发布时间】:2010-12-30 20:56:28
【问题描述】:
在为 iPhone 编程时,何时最好在其他 API 上使用 CoreAnimation(反之亦然)? OpenGL 具有更通用的功能范围(尽可能低级)。 CoreAnimation 更容易设置,并且具有缓存等功能。
我正在制作一个游戏(2D),它涉及到很多物理。我真的希望这款游戏以至少 50 FPS 的速度运行,最好是 60(或任何跟上 vsync 所需的速度)。在这种情况下,我不知道如何使用动画,但我可以将所有内容拆分为精灵/CALayers。我将在每一帧设置它们的位置和旋转(也许只是可见的)。许多精灵是相同的。其中一些精灵每帧都会改变颜色。我不会使用很多图像,但我会使用很多渐变。
那么,CoreAnimation 会是优化还是瓶颈?什么时候最好使用 CoreAnimation,什么时候最好使用其他 API?
【问题讨论】:
标签:
iphone
cocoa-touch
opengl-es
core-animation
physics
【解决方案1】:
Core Animation 让您可以用最少的代码做很多事情。它使管理 2-D 图层及其动画变得相对容易。因为动画是为您处理的,即使是那些涉及复杂路径或时序曲线的动画,您不需要编写代码来更新每一帧的显示或计算动画的补间。 Core Animation 还与 Quartz 中的 2-D 绘图功能、原生 Cocoa Touch 界面元素和触摸处理以及应用程序中其他地方的 Objective-C 代码完美集成。
如果您按预期使用该框架,您可以获得非常好的性能。在我对旧的第一代 iPhone 的基准测试中,我能够以大约 60 FPS 的速度在屏幕上一次为 50 个半透明图层设置动画。但是,这是提前为每一层指定预定义的线性路径,并且不会中断动画。
OpenGL ES 适用于您认为不直接与底层硬件对话就无法获得必要性能的情况,或者当您需要进行真正的 3-D 工作时(Core Animation 可以做的有限3-D 效果,但仅限于矩形平面)。获得更好的性能和更大的灵活性的权衡是需要编写更多更难阅读的代码。此外,有时调试 OpenGL ES 可能是一场噩梦。
OpenGL ES 的另一个潜在优势是它非常独立于平台,因此您可以构建渲染器,使其可以轻松地从 iPhone 移植到 Android、桌面等。
一般来说,我的建议是首先查看 Core Animation,看看它是否可以满足您的需求,因为您可以通过这种方式更快地构建应用程序。如果这不合适,并且您正在考虑制作 2-D 游戏,那么cocos2d 可能是一条不错的路径。我自己没有使用过该框架,但我听说它简化了进行 2-D OpenGL ES 工作的过程。只有当这些方法都不合适时,您才应该使用 OpenGL ES。
如果您好奇,我会在 my course on iTunes U 的视频中介绍 Core Animation 和 OpenGL ES,您可以在其中浏览并了解在这两种环境中工作需要什么。