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