我在Screen类的render方法中检查delta值.我看到它不是常量.任何人都可以告诉它它来自何处以及它是什么?它在不同的屏幕尺寸上有所不同吗?如果是这样我们怎么能克服这个?我问这个原因我的玩家跳跃取决于delta时间,有时它跳得太高.....
noo*_*one 17
这deltaTime与屏幕尺寸无关.它是最后一帧渲染的时间量.在LibGDX的情况下渲染还包括您在render()方法中执行的所有逻辑.
通常,您希望游戏在不同设备上以相同的速度运行.如果你的渲染方法看起来像这样......
public void render(float deltaTime) {
float speed = 5f;
position = position + speed;
}
Run Code Online (Sandbox Code Playgroud)
...然后,快速设备上的位置变化会更快,而慢速设备上的位置会变慢,这只是因为渲染方法被称为不同的次数.
为了克服这个问题,deltaTimeLibGDX就是在几秒钟内.要让位置在不同设备上以相同的速率变化,通常会这样做:
public void render(float deltaTime) {
float speedPerSecond = 5f;
position = position + (speedPerSecond * deltaTime);
}
Run Code Online (Sandbox Code Playgroud)
在float delta你的render(delta)方法是在几秒钟内给出的最后一帧并且在该帧之间的时间.您可以通过调用随处获得此值Gdx.graphics.getDelta().该值在n帧上平滑.要获得实时(在大多数情况下这不是必需的),您可以致电Gdx.graphics.getRawDeltaTime().此值用于移动游戏中的对象,具体取决于帧之间的经过时间,而不是以固定的像素数移动它们.要做到这一点,你可以简单地mulitply你movementSpeed这个delta让你的对象应该行驶的距离.
我建议限制你的增量时间,因为巨大的增量时间(由慢速设备或其他东西引起)可能会陷入困境,例如碰撞检测.例如,要将其限制delta为30FPS 的时间,您可以简单地说delta = Math.min(delta, 1/30);