Libgdx如何计算经过的时间

时间:2014-05-29 12:03:12

标签: java timer libgdx

我试图通过在render方法中将delta的值添加到我的浮点值来计算libgdx中的已用时间,这是我自播放状态开始以来测量的时间。错误或问题,你想如何调用它,是通过我的计算,显示的时间是实时的两倍。我试图除以2并且我非常接近实时,这意味着通过在每次渲染调用中添加delta我几秒钟内都无法获得实时。为什么会这样?

private float time=0;
public void render () {
    time +=Gdx.graphics.getDeltaTime();
}

上面没有得到实时,我的问题是为什么? 编辑:我正在使用一个屏幕,但无所谓我尝试了Gdx.graphics.getDeltaTime()和渲染方法中的delta参数。

4 个答案:

答案 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的()。如果您想兼容,请使用此选项   跨所有平台!"