使用Quartz的iOS逐帧动画

时间:2011-07-30 05:40:57

标签: iphone ios animation opengl-es quartz-2d

我正在制作的iPhone游戏只涉及一个对象的二维,基于翻译的动画。该对象是UIView的子类,并使用Quartz-2D绘制。翻译目前由NSTimer生效,该NSTimer勾选每一帧并告诉UIView改变其位置。

然而,有一些相当复杂的数学背后确定UIView在下一帧中应该移动的位置。在iOS模拟器上测试游戏工作正常,但在iPhone上进行测试时,它似乎肯定是在跳帧。

我的问题是:我的方法是逐帧翻译视图只是一种糟糕的方法吗?我知道OpenGL更常用于游戏,但为这样一个简单的动画设置OpenGL似乎是一种耻辱。但是,值得麻烦吗?

2 个答案:

答案 0 :(得分:1)

如果不知道正在进行什么样的复杂数学来计算翻译,很难说。使用OpenGL只有在GPU真正成为瓶颈的情况下才有意义。我怀疑情况并非如此,但您必须测试哪些部分导致跳过的帧。

通常,UIViewCALayer是在OpenGL之上实现的,因此动画UIView的翻译动画已经使用了GPU。

另外,使用CADisplayLink代替NSTimer可能会更适合游戏循环。

答案 1 :(得分:0)

iPhone模拟器的问题是它可以访问与mac相同的资源。您的macs ram,视频卡等。我建议您打开iPhone SDK附带的instruments.app,并使用CoreAnimation模板查看您的资源管理方式。您还可以查看分配,看看它是否会占用内存。 CPU也可以提供帮助。

tl;博士iPhone sim使用你的macs ram和GFX卡。尝试查看仪器中的序列,看看是否有些滞后。