【发布时间】:2020-05-14 08:03:24
【问题描述】:
在 libGDX 中以给定速度移动游戏中对象的正确方法是什么?例如。我在屏幕底部有一个圆圈,我想以每秒 10 像素的速度将它移动到顶部。所有手机都有不同的速度,所以每部手机上渲染功能的增量时间都不同,我该怎么做?
【问题讨论】:
标签: java android android-studio libgdx
在 libGDX 中以给定速度移动游戏中对象的正确方法是什么?例如。我在屏幕底部有一个圆圈,我想以每秒 10 像素的速度将它移动到顶部。所有手机都有不同的速度,所以每部手机上渲染功能的增量时间都不同,我该怎么做?
【问题讨论】:
标签: java android android-studio libgdx
我不确定你的意思是什么:
所有手机都有不同的速度,所以每部手机渲染功能的增量时间是不同的...
但我认为你对渲染过程中delta值的理解是不正确的。
您可能已经知道,render 方法每秒被调用多次,每次完成对 render 方法的调用后,屏幕都会更新。通过查看Gdx.graphics.getFramesPerSecond()可以查到render方法被调用了多少次。那么 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 方法设置增量时间:
world.step(Gdx.graphics.getDeltaTime());
在render() 方法的末尾。这允许 libGDX 管理 FPS。
要根据需要调整对象速度,您可以使用每米像素系数:http://seanballais.github.io/blog/box2d-and-the-pixel-per-meter-ratio/
【讨论】: