java - libGDX 中对象的速度
问题描述
在 libGDX 中以给定速度移动游戏中对象的正确方法是什么?例如。我在屏幕底部有一个圆圈,我想以每秒 10 像素的速度将它移动到顶部。所有手机都有不同的速度,所以每部手机上渲染功能的增量时间都不同,我该怎么做呢?
解决方案
我不确定你到底是什么意思:
所有手机都有不同的速度,所以每部手机上渲染功能的增量时间是不同的......
但我认为您对渲染过程中增量值的理解是不正确的。您可能已经知道,渲染方法每秒被调用多次,每次完成对渲染方法的调用后,屏幕都会更新。可以查看render方法调用了多少次Gdx.graphics.getFramesPerSecond()
。那么增量值的目的究竟是什么?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
}
推荐阅读
- python - 为什么从 yellowbrick.target 运行 import FeatureCorrelation 会导致 sklearn.metrics.classification 错误?
- java - Java 中的 Iterable 不允许使用通配符
- javascript - 有没有办法用python从html中的javascript获取数据
- vba - VBA 代码从多个 MS Word 文档的标题中提取文档 ID 和描述,并自动填充到单独的 Word 文档中
- javascript - 如何在反应中将状态设置为对象数组
- javascript - JavaScript:为什么 for 循环与 var & let 的工作方式不同
- c++ - 全局变量是否会显着提高 C++ 中的编译速度?
- python - 在 Python 中使用 Ray 并行化任务,得到“Aborted (core dumped)”
- php - 我的页脚下方有侧边栏信息?
- remote-desktop - 如何从远程 ssh 安装 noMachine