LIBGDX的Delta时间是多少?我读了很多关于这个的帖子。据我所知,达美时间是,
为了让游戏的速度保持不变,我们使用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方法但我需要一些清晰的视图。很抱歉,如果这个问题看起来很愚蠢,但实际上很难在不知道发生了什么的情况下继续进行。任何帮助都会很棒!
答案 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。
回答您的底层问题,我想这是将您的渲染方法拆分为单独的更新方法。
答案 1 :(得分:1)
它比你想要的更简单。增量时间是自上次渲染调用以来经过的秒数。从displacement = velocity * time
开始,您将对象的速度乘以delta时间,以获得自上次渲染调用以来它移动了多远。速度以每秒为单位。如果它受到加速度的影响,它可以是代码中的常量或您计算的内容。您使用的距离单位取决于您。它们可以是米,像素(不是一个好主意,因为各种设备具有不同的屏幕尺寸)或一些其他任意距离单位。
说delta时间加起来是没有意义的。它只不过是自上一帧以来的秒数(因此它通常远小于1.0)。
说你想以每秒帧数移动一些内容也没有意义。你想每秒移动一些距离单位。
您的第一个代码示例不可编译。但是如果你要写一些类似
的东西myObject.position.x += 5*dt;
这意味着您的对象以每秒5个距离单位水平移动,因此您相应地更新其水平位置。