deltaTime 作为每个对象的局部变量,还是单个共享变量?

deltaTime as a local variable on each object, or a single shared variable?

假设我有一个带有 Update() 方法的 GameWorld。除了我的 GameWorld,我还有一个带有 Update() 方法的 GameObject class。

GameWorld 有我的 GameObject class 的 0..* 个实例,并且 GameWorld 中的 Update() 方法在我的 GameWorld 中的所有 GameObject 上调用 Update()。

我需要在我的每个游戏对象中使用 deltaTime,这是我的问题: 在我的 GameWorld 中创建一个 deltaTime 并让所有 GameObject 通过 GameWorld 访问 deltaTime 是否可以?此 deltaTime 将在 GameWorld 的 Update() 中更新。

还是在 GameObject 中创建一个本地 deltaTime 变量更好 class,这样每个对象都有自己的 deltaTime,并让每个 GameObject 上的 Update() 处理 deltaTime?

做一个或另一个是否有任何优点或缺点,或者它会给我相同的结果吗?

我认为每个 GameObject 有一个 deltaTime 会更好。如果您有大量对象,并且它们的 Update() 函数内的计算需要大量时间,则 GameWorlddeltaTime 可能与对象最后一次运行以来实际经过的时间不同更新。此外,根据您选择的实现程序的方法,每个对象的时间差异可能不同,这可能会导致额外的复杂性。

例如,假设您有两个 GameObject 实例。调用 GameWorld.Update() 并计算 deltaTime。现在,如果第一个对象的更新时间出乎意料地长,第二个对象将收到一个 deltaTime,它小于自上次更新以来经过的实际时间。此外,在下一次更新中,第一个对象将收到一个大于实际值的deltaTime

在我看来,你应该这样做:

class GameObject
{
   DateTime lastUpdate;

   void Update()
   {
      TimeSpan deltaTime = DateTime.Now - lastUpdate;

      ...
   }
}

计算成本和内存的开销可以忽略不计,虽然 deltaTime 的 "static" 实现在大多数情况下可能就足够了,但上面的代码可以让您免于以后的许多麻烦。