【问题标题】:Delta value in render method libgdx渲染方法 libgdx 中的增量值
【发布时间】:2014-03-14 12:45:26
【问题描述】:

我在 Screen 类的 render 方法中检查了 delta 值。我看到它不是恒定的。任何人都可以说出它来自哪里以及它是什么吗?不同的屏幕尺寸有区别吗?如果是这样,我们该如何克服呢?我问这个是因为我的玩家跳跃取决于增量时间,有时它跳得太高.....

【问题讨论】:

    标签: libgdx timedelta


    【解决方案1】:

    deltaTime 与屏幕尺寸无关。这是最后一帧被渲染所花费的时间。在 LibGDX 的情况下渲染还包括您在 render() 方法中执行的所有逻辑。

    通常您希望游戏在不同设备上以相同的速度运行。如果你的渲染方法看起来像这样......

    public void render(float deltaTime) {
        float speed = 5f;
        position = position + speed;
    }
    

    ...那么位置在快速设备上的变化会更快,而在慢速设备上的变化速度会变慢,这只是因为渲染方法被调用的次数不同。

    为了克服这个问题,有 deltaTime 在 LibGDX 的情况下以秒为单位。要让位置在不同设备上以相同的速率变化,您通常会这样做:

    public void render(float deltaTime) {
        float speedPerSecond = 5f;
        position = position + (speedPerSecond * deltaTime);
    }
    

    【讨论】:

      【解决方案2】:

      render(delta) 方法中的float delta 是最后一帧和本帧之间的时间,以秒为单位。您可以通过调用Gdx.graphics.getDelta() 在任何地方获取此值。 该值在 n 帧上平滑。 要获得实时信息(在大多数情况下这并不是真正需要的),您可以致电Gdx.graphics.getRawDeltaTime()。 此值用于根据帧之间经过的时间移动游戏中的对象,而不是以固定数量的像素移动它们。为此,您可以简单地将您的 movementSpeed 与此 delta 相乘,以获得您的对象应该行进的距离。

      我建议限制您的 delta 时间,因为巨大的 delta 时间(由慢速设备或其他原因引起)可能会搞砸,例如碰撞检测。例如,要将其限制为 30FPS 的 delta 时间,您可以简单地说 delta = Math.min(delta, 1/30);

      【讨论】:

      • 是的,我面临一个问题,有时我的玩家跳跃高度会发生变化。但是我应该限制多少时间我怎么知道呢?
      • 你必须尝试一下,因为这取决于游戏设计。例如,libgdx scene2D Stage 将其限制为 1/30。因此,如果您在 30FPS 下玩游戏,则增量不再计算在内。尝试使用不同的值并查看最适合您的值。
      • 与我自己做 System.currentTimeMillis 相比,我得到不同的增量。这可能是什么原因?如果我使用 System.currentTimeMillis,我会得到持续的低数字,但如果我使用 delta,那么偶尔,我会得到非常大的数字,完全搞砸我的补间动画。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      相关资源
      最近更新 更多