【问题标题】:What is the time delta or timestamp used for in game loop update methods?游戏循环更新方法中使用的时间增量或时间戳是多少?
【发布时间】:2013-12-01 21:55:27
【问题描述】:

以cocos2D为例:

- (void)update:(ccTime)delta

谁能解释这些时间增量或时间戳的用途?它们与游戏世界的更新方式有什么关系?是不是因为我们不可靠地了解 fps,不应该仅仅依赖基于 -update 调用的增量属性更新?

【问题讨论】:

  • 在 FPS 上阅读@LearnCocos2d 的答案...stackoverflow.com/questions/13830185/…。基本上,您将获得(在 cocos2d 中)在屏幕刷新周期之后调用的所有更新方法。根据您在这些更新方法中所做的任何事情(即所花费的时间),您的代码可能会极大地影响 FPS,但主要是每次调用的毫秒数。因此,下次您被呼叫时,了解自上次呼叫以来的增量可能很重要,以防您试图以可感知的方式模拟真实的时间基准(跳过帧,移动更多作为士兵速度的函数)。跨度>
  • 好的,所以 delta 的目的是您的动画不依赖于 FPS,而是依赖于时间?
  • 正确。即使您设置了 fps ,它也只是一个模糊的承诺,而不是承诺。因此,您可以以 0.0167 秒的一帧结束(以 60fps 的速度),下一帧为 0.033 秒。如果您想避免不稳定的移动,时间很重要。

标签: ios opengl-es cocos2d-iphone game-engine runloop


【解决方案1】:

这对于使框架独立移动很重要。通常,任何角色移动都会考虑自上次更新调用以来的时间。

这是为了确保您的游戏在不同性能的设备上表现相同。如果您将角色每帧移动 1 个像素,那么在以 60 fps 运行的设备上,角色的移动速度将是 30 fps 设备上的两倍。

通过影响所有移动代码,例如通过 delta 时间,您可以确保所有设备的行为都相同。

让运动帧率独立是很简单的。将运动矢量乘以 deltaTime 之类的方法可以实现这一点。

【讨论】:

  • 如果视觉效果(视图)没有与游戏逻辑(模型)解耦,事情就没有那么简单了。您最终可能会遇到游戏逻辑问题,例如以低帧速率通过碰撞隧道:learn-cocos2d.com/2013/10/…
  • 哦,好的,所以 deltaTime 是一个因素。例如,当设备有 30 fps 时它是 2,而当设备有 60 fps 时它是 1?你把它和一切相乘?关于解耦游戏逻辑的要点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多