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