Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LIBGDX中的增量时间是多少_Libgdx - Fatal编程技术网

LIBGDX中的增量时间是多少

LIBGDX中的增量时间是多少,libgdx,Libgdx,LIBGDX中的增量时间是多少?我读了很多关于这个的帖子。据我所知,三角洲时间是 上一帧和当前帧之间的时间间隔 增量时间加起来最多为1,因为它是每秒x帧的计算,即(帧的1/x) 为了使游戏的速度恒定,我们使用dt 如果我们说60*dt,那么它将每秒移动60帧,不管移动设备的速度如何(例如) 这就是我对增量时间的了解,但我没有得到一个清晰的认识,因为无论是对于更新还是渲染方法,我们都在传递增量时间,但在代码中我们指定每秒计算的是什么 比如说, public void update(fl

LIBGDX中的增量时间是多少?我读了很多关于这个的帖子。据我所知,三角洲时间是

  • 上一帧和当前帧之间的时间间隔
  • 增量时间加起来最多为1,因为它是每秒x帧的计算,即(帧的1/x)
  • 为了使游戏的速度恒定,我们使用dt

    如果我们说60*dt,那么它将每秒移动60帧,不管移动设备的速度如何(例如)

    这就是我对增量时间的了解,但我没有得到一个清晰的认识,因为无论是对于更新还是渲染方法,我们都在传递增量时间,但在代码中我们指定每秒计算的是什么

比如说,

    public void update(float dt)
     {
       float distance +=2*dt;
     }
这个代码每秒会移动2帧吗?如果是,那么下面的代码将执行什么操作

    public void update(float dt)
    {
      ....
    }
    public void render(float delta)
    {
      update(delta);
    }
所以,我需要答案

  • 上面的代码是什么意思
  • 代码背后到底发生了什么
  • 我们为什么这样做
  • 在这段代码中,我们指定它必须像上面的例子那样每秒移动x帧

    我可以理解渲染方法正在将增量时间传递给更新方法,但我需要一些关于它的清晰视图。抱歉,如果这个问题看起来很愚蠢,但是如果不知道发生了什么事情,就很难继续进行。任何帮助都会很好

是上一次呼叫开始与当前呼叫开始之间的时间。它也是您在方法中获得的值。就这样。没有黑魔法什么的。它只取当前时间并从中减去前一时间。该值的最大值为秒。请注意,它加起来不是一

因此,如果上一次调用该方法的时间为
6:51:30.0159512 pm
,而当前调用该方法的时间为
6:51:30.0324858 pm
,则差值为
0.0165346秒

速度(速度)以每秒“单位”测量,例如
米/秒
或短:
米/秒
。如果您的汽车以
360 m/s
的速度行驶,并且经过的时间是
0.0165346 s
,那么您在该时间内行驶的距离是
0.0165346*360 s*m/s
=>
5.952456 m
,因此几乎是6米

请注意,这是基础物理,不是libGDX特有的。如果你发现它很难理解,那么你可能想仔细阅读

回答下面的问题,我猜是关于将渲染方法拆分为单独的更新方法

  • 代码没有暗示任何东西
  • 代码背后没有任何东西
  • 使用定义良好的简短方法通常是一种良好的做法,请阅读:
  • 不知道你所说的“帧”是什么意思,但是速度乘以到达的时间 保持距离

这比你想象的要简单。Delta time是自上次渲染调用以来经过的秒数。由于
displacement=velocity*time
将对象的速度乘以delta time,以获得自上次渲染调用以来对象移动的距离。速度单位为每秒。它可以是代码中的一个常数,也可以是受加速度影响而计算出来的。您使用的距离单位由您决定。它们可以是米、像素(这不是个好主意,因为各种设备的屏幕尺寸不同)或其他任意距离单位

说delta time加起来就是1是没有意义的。它只不过是距离最后一帧的秒数(因此通常远小于1.0)

如果说你想以每秒帧的速度移动某个东西,这也是没有意义的。你想每秒移动一些距离单位

您的第一个代码示例不可编译。但是如果你要写这样的东西

myObject.position.x += 5*dt;

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

谢谢,但是你能告诉我为什么我们要把这个时差(增量时间)传递给更新方法吗?为什么它有用?我理解第一个例子的解释,但为什么我们要对第二个例子这么做?当我们通过增量时间更新方法时,它试图揭示什么?@xoppa有什么用呢?所以你会问为什么在更新方法中有一个delta-time参数?这是您创建的方法,它不是libGDX的一部分,您不必这样做。但通常情况下,您希望将更新游戏与渲染游戏分开(请参见我的最后一个链接)。更新游戏包括,例如,将汽车设置在其新位置,因此需要增量时间来了解其行驶的距离。它很有用,因为它更易于阅读和维护。您可以安全地将更新方法的内容移动到渲染方法。除了最后一个链接之外,您可能还想了解OOP。