0

我目前正在将 LibGDX 用于 Android 项目,但我认为无论您使用什么框架/库或语言,这个问题的答案都会很有用。

我在 Internet 上找到的所有教程(针对 LibGDX)都会在render()调用整个应用程序的方法时以及在绘制每个实体之前进行计算,就像移动实体一样。我认为这可能是必要的,因为例如,如果您有一个对象在render()调用方法时应该以 3m/s 的速度移动,您将执行类似position.y = velocity.y * deltaTime的操作,以便根据对象的速度进行移动。

但是像 -> AI 控制的对象应该遵循什么路径才能不撞墙或根据玩家的动作进行计算呢?在 2D 中,甚至在 3D 中,可能会有很多计算、算术运算等......结果与 t 无关,deltaTime也不需要知道它。此外,这可能会减慢渲染速度,因此在某些功能不是很强大的手机或平板电脑上运行应用程序时。

那么这种类型的计算应该在渲染时进行还是仅在另一个线程需要时进行?

4

1 回答 1

1

实际上,您通常希望在显示线程中呈现特定于渲染的内容。显然,这本身仍然是相当激烈的。然而,像在物理模拟中更新一个单元的位置、AI 计算等,应该在一个单独的线程中(取决于系统资源和架构,一个一个)——你希望渲染线程尽可能快。

还有一种叫做关注点分离的东西——如果你既要更新对象在屏幕上的位置(重新绘制),又要在同一个线程中移动它,那么它会做件事,这可能会使未来的修改/维护更加困难。

请注意,如果您正在执行多线程架构,您的设置将需要有一些方法来确保您在渲染它们时不会更新它们,否则您可能会得到一些奇怪的结果。

于 2012-09-04T15:44:33.333 回答