在iOS上,如何实现流畅的动画?

时间:2012-04-21 14:47:56

标签: ios animation opengl-es cocos2d-iphone

对于“愤怒的小鸟”或“剪切绳索”,它们首先绘制整个画面的整个画面(整个视图),然后将整个画面画到屏幕上,使动画变得平滑吗?

那是因为如果我们为一个尺寸为20 x 20像素的金属球制作动画,如果我们先将球擦掉,然后将球拉到一个新的位置,那么可能会有一些非常微妙但却引人注目的闪烁。

同样可能是drawRect动画,它将擦除整个屏幕,然后在新位置绘制所有内容,这可能比上面的内容更闪烁?

回到绘图整帧方法:如果一个球处于坐标(100,100),现在球被绘制在整个屏幕截图的顶部(暴露了新的背景),在坐标(103,100),那么这些变化是非常不明显的。 (没有消失,然后再次出现)。

如何实现看起来像“愤怒的小鸟”或“割绳子”游戏的流畅动画?

3 个答案:

答案 0 :(得分:4)

他们使用OpenGL,它比任何Quartz方法(即drawRect)都快很多,因为它使用GPU而不是CPU进行渲染。使用Quartz可能会慢几百或几千倍,具体取决于您正在做什么。

如果您不想诉诸OpenGL。您可以将对象放在UIView中,然后为其设置动画。只要视图的内容是静态的,对于大多数应用程序来说这是非常快的。例如,将背景视为视图,将金属球视为视图,您可以移动该视图并实现非常平滑的动画而不会出现问题。

答案 1 :(得分:1)

使用CALayers。它们比视图更轻量级。

答案 2 :(得分:1)

如果一个应用程序使用OpenGL,答案是肯定的,它会在之前渲染帧缓冲区呈现给屏幕。我认为在将完成的图像传输到屏幕之前,绘制到屏幕的其他方法使用相同的绘制到屏幕外缓冲区的技术,但我不太确定。