什么是LIBGDX的Delta时间

时间:2015-12-27 09:16:25

标签: libgdx

LIBGDX的Delta时间是多少?我读了很多关于这个的帖子。据我所知,达美时间是,

  • 上一帧与当前帧之间的时间差距
  • 增量时间将增加到1,因为它计算每秒x帧,即。(1 / x帧)
  • 为了让游戏的速度保持不变,我们使用dt

    如果我们说60 * dt那么它将每秒移动60帧,无论移动速度如何(例如)。

    所以,这就是我对delta时间的了解,但是我没有得到关于它的清晰视图,因为无论是更新还是渲染方法,我们都会传递delta时间,但是我们在指定的代码中为每秒?

例如,

0  000
1  111
a  aaa
A  AAA
B  BBB
b  bbb
2  222
D  DDD
d  ddd

此代码每秒移动2帧吗?如果是,那么下面的代码会做什么?

    public void update(float dt)
     {
       float distance +=2*dt;
     }

所以,我需要答案,

  • 上面的代码暗示什么?
  • 代码背后究竟发生了什么?
  • 我们为什么这样做?
  • 在这段代码中我们指定它必须像上一个例子一样每秒移动x帧吗?

    我可以理解render方法是将delta时间传递给update方法但我需要一些清晰的视图。很抱歉,如果这个问题看起来很愚蠢,但实际上很难在不知道发生了什么的情况下继续进行。任何帮助都会很棒!

2 个答案:

答案 0 :(得分:19)

Gdx.graphics.getDeltaTime()是从前一个开始到当前render()调用开始的时间。这也是您在Screen#render()方法中获得的价值。而已。没有黑魔法或什么的。它只需要当前时间并从中减去前一次。此值的unit为秒。请注意,它不会加起来。

因此,如果前一次调用该方法的时间是6:51:30.0159512 pm,并且调用它的当前时间是6:51:30.0324858 pm,则差异为0.0165346 seconds

速度(速度)以每秒“单位”为单位进行测量,例如meter per second或短m/s。如果您的汽车在360 m/s行驶且经过的时间为0.0165346 s,则您在此时间内行驶的距离为0.0165346*360 s*m/s => 5.952456 m,差不多6米。

请注意,这是基本的物理,它不是特定于libGDX。如果您觉得很难理解,那么您可能需要阅读velocity

回答您的底层问题,我想这是将您的渲染方法拆分为单独的更新方法。

  • 代码并不暗示任何事情
  • 代码背后没有任何内容
  • 使用定义明确的简短方法通常是一种很好的做法,请阅读:separation of concerns
  • 不知道“帧”的意思,但速度乘以时间 得到距离

答案 1 :(得分:1)

它比你想要的更简单。增量时间是自上次渲染调用以来经过的秒数。从displacement = velocity * time开始,您将对象的速度乘以delta时间,以获得自上次渲染调用以来它移动了多远。速度以每秒为单位。如果它受到加速度的影响,它可以是代码中的常量或您计算的内容。您使用的距离单位取决于您。它们可以是米,像素(不是一个好主意,因为各种设备具有不同的屏幕尺寸)或一些其他任意距离单位。

说delta时间加起来是没有意义的。它只不过是自上一帧以来的秒数(因此它通常远小于1.0)。

说你想以每秒帧数移动一些内容也没有意义。你想每秒移动一些距离单位。

您的第一个代码示例不可编译。但是如果你要写一些类似

的东西
myObject.position.x += 5*dt;

这意味着您的对象以每秒5个距离单位水平移动,因此您相应地更新其水平位置。