渲染方法libgdx中的增量值

渲染方法libgdx中的增量值,libgdx,timedelta,Libgdx,Timedelta,我在Screen类的render方法中检查了delta值。。我看到它不是常数。任何人都能说出它从哪里来,是什么吗?它在不同的屏幕尺寸上有区别吗?如果是这样的话,我们如何克服这一点?我问这个问题是因为我的播放器跳转取决于增量时间,有时它跳得太高。增量时间与屏幕大小无关。它是渲染最后一帧所用的时间量。对于LibGDX,render还包括在render()方法中执行的所有逻辑 通常,您希望游戏在不同的设备上以相同的速度运行。如果渲染方法看起来像这样 public void render(float d

我在Screen类的render方法中检查了delta值。。我看到它不是常数。任何人都能说出它从哪里来,是什么吗?它在不同的屏幕尺寸上有区别吗?如果是这样的话,我们如何克服这一点?我问这个问题是因为我的播放器跳转取决于增量时间,有时它跳得太高。

增量时间与屏幕大小无关。它是渲染最后一帧所用的时间量。对于LibGDX,render还包括在
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);
}

render(delta)
方法中的
float delta
是最后一帧与此帧之间的时间,以秒为单位。通过调用
Gdx.graphics.getDelta()
,您可以在任何地方获得该值。 该值在n帧上平滑。 要获得实时性(在大多数情况下这并不是必需的),可以调用
Gdx.graphics.getRawDeltaTime()
。 此值用于根据帧之间经过的时间移动游戏中的对象,而不是以固定的像素量移动对象。要做到这一点,您只需将
movementSpeed
与此
delta
叠加,即可获得您的物体应该移动的距离


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

Ya我面临一个问题,有时我的球员跳跃高度会发生变化。但是我应该限制多少时间我怎么知道呢?你必须试试,因为这取决于游戏设计。例如,libgdx
scene2D
Stage
将其值限制为1/30。因此,如果你在30 fps以下,三角洲不再计算。尝试使用不同的值,看看哪一个最适合你。如果我使用System.currentTimeMillis,我会得到不同的增量vs。这可能是什么原因?如果我使用System.currentTimeMillis,我会得到一致的低数字,但如果我使用delta,那么偶尔,我会得到非常大的数字,完全破坏了我的tween动画。