渲染方法libgdx中的Delta值

时间:2014-03-14 12:45:27

标签: libgdx timedelta

我在Screen类的render方法中检查delta值。我看到它不是常量。任何人都可以告诉它它来自何处以及它是什么?它在不同的屏幕尺寸上有所不同吗?如果是这样我们怎么能克服这个?我问这个原因我的玩家跳跃取决于delta时间,有时它跳得太高.....

2 个答案:

答案 0 :(得分:17)

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);
}

答案 1 :(得分:9)

float delta方法中的render(delta)是最后一帧与此帧之间的时间,以秒为单位。您可以通过调用Gdx.graphics.getDelta()在任何地方获取此值。 该值在n帧上平滑。 要获得实时(在大多数情况下这不是必需的),您可以致电Gdx.graphics.getRawDeltaTime()。 此值用于移动游戏中的对象,具体取决于帧之间的经过时间,而不是以固定的像素数移动它们。要做到这一点,您可以简单地使用此movementSpeed多次delta来获取对象应该移动的距离。

我建议限制你的增量时间,因为巨大的增量时间(由慢速设备或其他东西引起)可能会陷入困境,例如碰撞检测。例如,要将其限制为30 {000}的delta时间,您可以简单地说delta = Math.min(delta, 1/30);