【问题标题】:iOS frame-by-frame animation with Quartz使用 Quartz 的 iOS 逐帧动画
【发布时间】:2011-07-30 05:40:57
【问题描述】:

我正在开发一款 iPhone 游戏,它只涉及一个对象的二维、基于平移的动画。该对象是 UIView 的子类,并使用 Quartz-2D 绘制。翻译当前由 NSTimer 生效,该 NSTimer 对每一帧进行标记并告诉 UIView 更改其位置。

但是,确定 UIView 在下一帧中应该移动的位置背后有一些相当复杂的数学运算。在 iOS 模拟器上测试游戏效果很好,但在 iPhone 上测试时,它肯定会跳帧。

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

【问题讨论】:

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


    【解决方案1】:

    如果不知道计算翻译的复杂数学是什么,很难说。仅当 GPU 确实是瓶颈时,为此使用 OpenGL 才有意义。我怀疑情况并非如此,但您必须测试哪些部分导致了跳帧。

    一般来说,UIViewCALayer 是在 OpenGL 之上实现的,因此对UIView 的平移进行动画处理已经使用了 GPU。

    顺便说一句,使用CADisplayLink 而不是NSTimer 可能更适合游戏循环。

    【讨论】:

    • CADisplayLink 是个好主意,谢谢。至于瓶颈,我不知何故忘记记住实际上还有另一个动画,它基本上是一系列每帧更新的线条。我意识到目前使用 Quartz 绘制的这可能是瓶颈,应该在 OpenGL 中完成。
    【解决方案2】:

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

    tl;dr iPhone sim 使用您的 macs ram 和 GFX 卡。尝试查看 Instruments 中的序列,看看是否有一些滞后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      相关资源
      最近更新 更多