glkView:drawInRect:和glkViewControllerUpdate:之间的区别是什么?- OpenGL ES 2 - iOS

6

在我的渲染循环中,这两种方法的目的有何不同?

苹果公司对此的解释如下...

关于update() 视图控制器调用其委托的glkViewControllerUpdate:方法。您的委托应该更新与将结果呈现到屏幕无关的帧数据。

关于drawInRect: GLKView对象使其OpenGL ES上下文成为当前上下文,并将其帧缓冲绑定为OpenGL ES渲染命令的目标。您的委托方法应该绘制视图的内容。

因此,当我在我的视图控制器中创建一个GLKView时,该控制器成为委托,因此我正在并排查看这些方法。

我认为update()应该包含任何变换或其他逻辑。

1个回答

5

首先,苹果公司试图帮助您将时间与帧速率分离。如果您的游戏总是能够在单个帧的规定时间内绘制一帧,则两者将同步进行。但即使许多对象出现在屏幕上并且您的帧速率有所下降,您仍将以相同的更新次数每秒获得相同的对象移动速度。

其次,他们正在帮助您保持代码按模型-视图-控制器分离。如何呈现您的对象应该与它们的操作方式分离。

因此,您的更新应推进引起动画的任何内容,您的绘图应呈现当前状态。


我明白了。例如在《太空侵略者》中,新的飞船进入模型视图或玩家放大行星的操作应该由更新函数负责。而 drawInRect: 函数只是简单地将矩阵投影到所需的帧速率上,但根据负载情况并不总能跟得上。 - Half_Duplex
是的 - 任何更新游戏状态的逻辑都将成为update的一部分,无论是添加新模型还是移动相机。 - Tommy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接