1

这对我来说从来没有意义。我查看了 GLFW 和 Three.js 的示例以及 Cinder 的实现,其中实际上有以下评论

将所有窗口标记为可以绘制;这真的只在第一次重要,以确保第一次 update() 在 draw() 之前触发

所有三个图书馆似乎都在这样做,我不明白为什么。更新从未在屏幕上绘制过的东西的 ie 位置真的没有意义吗?

这是我的循环的样子:

  1. 绘制(第一)帧
  2. 交换缓冲区
  3. 更新事件
  4. 动画(使用来自事件的输入),更新逻辑,...
  5. 从顶部开始

这个顺序对我来说更有意义,但也许我错过了一些东西。

4

1 回答 1

1

我认为首先更新对象然后绘制它们是非常有意义的。

想象一下,您将一个球从屏幕的一侧移动到另一侧,然后像钟摆一样返回。想象一下,您还希望它在您的计算机中实际反映实时。如果您在更新球的位置之前绘制场景,那么您的球将在第一帧中定位在哪里?除非您手动设置它的初始位置,否则它将位于场景的零点,这可能完全超出预期的轨迹。如果您决定在动画开始之前初始化它的位置,可能会发生时间间隔导致它也处于错误的位置。

但是,如果您总是在绘制之前更新它的位置,那么它将位于从第一个渲染帧开始的正确位置。

但老实说 - 没有人可能会注意到第一帧,所以这样做更符合逻辑而不是任何实际原因。我只是觉得在绘制之前准备好场景更有意义,反之亦然。

于 2014-03-19T14:37:03.743 回答