我试图通过在render方法中将delta的值添加到我的浮点值来计算libgdx中的已用时间,这是我自播放状态开始以来测量的时间。错误或问题,你想如何调用它,是通过我的计算,显示的时间是实时的两倍。我试图除以2并且我非常接近实时,这意味着通过在每次渲染调用中添加delta我几秒钟内都无法获得实时。为什么会这样?
private float time=0;
public void render () {
time +=Gdx.graphics.getDeltaTime();
}
上面没有得到实时,我的问题是为什么? 编辑:我正在使用一个屏幕,但无所谓我尝试了Gdx.graphics.getDeltaTime()和渲染方法中的delta参数。
答案 0 :(得分:13)
LibGDX仍然是Java的核心,只需使用标准方法来获取时间。在应用程序开始时使用
startTime = System.currentTimeMillis();
然后在渲染中你可以做
System.out.println("Time elapsed in seconds = " + ((System.currentTimeMillis() - startTime) / 1000));
确保将startTime声明为long。
至于为什么它没有使用你发布的方法,我不确定。
编辑:如果您的LibGDX项目未设置为以固定速率运行,则帧速率更改将导致Gdx.graphics.getDeltaTime()发生更改,因为更新的最后一帧返回增量时间。
答案 1 :(得分:13)
您可以使用包装器TimeUtils。
获取当前时间:
long startTime = TimeUtils.millis();
从startTime开始经过时间:
long elapsedTime = TimeUtils.timeSinceMillis(startTime);
答案 2 :(得分:3)
为什么不从标准java库中获取系统时间戳。在启动应用程序时以及当您想要计算经过时间时,请从当前时间减少该初始值。
long startTime = System.currentTimeMillis();
然后每当你想要获得经过的时间时:
long elapsed time = System.currentTimeMillis() - startTime;
我不认为添加delta是非常准确的,因为在libgdx停止测量delta和再次启动之间可能会有一些时间丢失,在这种情况下它会随着时间的推移而漂移。
不知道为什么你的速度提高了两倍......我知道渲染调用每秒调用60次。也许三角洲以某种方式考虑每秒30帧...
顺便说一下,还有getRawDeltaTime() 这应该会给你更准确的东西。更新:正如Christian评论的那样 - 你需要除以1000来得到秒的分辨率而不是毫秒。
答案 3 :(得分:3)
TimeUtils是可移植性所必需的。如果您计划在多个平台上进行部署,请避免使用系统类。由于这个原因,LibGdx也有自己的数组类。
示例:强>
public long time;
time = TimeUtils.nanoTime();
来自维基:
类TimeUtils"围绕System.nanoTime()和的包装器 System.currentTimeMillis的()。如果您想兼容,请使用此选项 跨所有平台!"