4

是不是Angry Birds或者Cut the Rope都是先画全屏的整帧(全视图),再把整帧画到屏幕上,让动画流畅?

这是因为如果我们为一个大小为 20 x 20 像素的金属球设置动画,并且如果我们先擦除球,然后在新位置绘制球,那么可能会出现一些非常微妙但很明显的闪烁。

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

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

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

4

3 回答 3

4

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

如果你不想求助于 OpenGL。您可以将对象放在 UIView 中,然后对其进行动画处理。只要视图的内容是静态的,这对于大多数应用程序来说已经足够快了。例如,将背景设置为视图,将金属球设置为视图,您可以移动该视图并实现非常流畅的动画而不会出现问题。

于 2012-04-21T15:09:35.433 回答
1

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

于 2012-04-22T01:17:36.147 回答
1

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

于 2012-04-21T17:18:17.133 回答