libGDX 中物体的速度

Speed of objects in libGDX

在 libGDX 中以给定速度在游戏中移动物体的正确方法是什么?例如。我在屏幕底部有一个圆圈,我想以每秒 10 像素的速度将它移动到顶部。所有 phone 的速度都不同,因此每个 phone 上渲染函数的增量时间都不同,那么我该怎么做呢?

您可以使用libGDX方法设置增量时间:

world.step(Gdx.graphics.getDeltaTime());

render() 方法的末尾。这允许 libGDX 管理 FPS.

要根据需要调整对象速度,您可以使用每米像素系数:http://seanballais.github.io/blog/box2d-and-the-pixel-per-meter-ratio/

我不确定你的意思:

All phones have different speeds so delta time of render function on every phone is different...

但我认为您对渲染过程中的delta值的理解是不正确的。 您可能已经知道,render 方法每秒被调用多次,每次完成调用 render 方法后,屏幕都会更新。 render 方法被调用了多少次可以查看Gdx.graphics.getFramesPerSecond()。那么 delta 值的目的究竟是什么? delta 只是当前帧(此渲染调用)和最后一帧(当前帧之前的渲染调用)之间的时间跨度,以秒为单位。

从物理学我们知道distance = velocity * time

因此,要使物体每 1 秒移动 10 个单位的距离(单位可以是像素、米等...——这实际上取决于您的相机和世界渲染逻辑),我们必须计算正确的当前帧的行进距离。我们知道速度和经过的时间 (delta)。我们可以这样计算下一个位置

public void render(float delta) {
    float velocity = 10.0f; // actually 10.0units / 1s
    position = position + velocity * delta; // position can be circle.y to travel up
}