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
}
在 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
}