Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Libgdx如何计算运行时间_Java_Timer_Libgdx - Fatal编程技术网

Java Libgdx如何计算运行时间

Java Libgdx如何计算运行时间,java,timer,libgdx,Java,Timer,Libgdx,我试图在libgdx中通过在render方法中添加delta的值来计算经过的时间,我的float值是自播放状态开始以来测量的时间。问题是,根据我的计算,执行此操作所显示的时间是实时时间的两倍。我尝试除以2,我非常接近实时,这意味着通过在每次渲染调用中添加增量,我无法在几秒钟内获得实时。为什么会这样 private float time=0; public void render () { time +=Gdx.graphics.getDeltaTime(); } 上面提到的并不是实时的

我试图在libgdx中通过在render方法中添加delta的值来计算经过的时间,我的float值是自播放状态开始以来测量的时间。问题是,根据我的计算,执行此操作所显示的时间是实时时间的两倍。我尝试除以2,我非常接近实时,这意味着通过在每次渲染调用中添加增量,我无法在几秒钟内获得实时。为什么会这样

private float time=0;
public void render () {
    time +=Gdx.graphics.getDeltaTime();
}
上面提到的并不是实时的,我的问题是为什么?
编辑:我使用的是一个屏幕,但没关系,我尝试了Gdx.graphics.getDeltaTime()和render方法中的delta参数。

LibGDX的核心仍然是Java,只需使用标准方法获取时间。在应用程序开始时使用

startTime = System.currentTimeMillis();
然后在渲染中可以执行以下操作:

System.out.println("Time elapsed in seconds = " + ((System.currentTimeMillis() - startTime) / 1000));
确保startTime被声明为long

至于为什么它不能用你发布的方法工作,我不确定


编辑:如果您的LibGDX项目未设置为以固定速率运行,则帧速率更改将导致Gdx.graphics.getDeltaTime()中的更改,因为会为最后更新的帧返回增量时间

为什么不从标准java库中获取系统时间戳呢。当您启动应用程序时以及当您想要计算经过的时间时,请从当前时间中减少该初始值

long startTime = System.currentTimeMillis();
然后,无论何时,只要您想获得经过的时间,请执行以下操作:

long elapsed time = System.currentTimeMillis() - startTime;
我不认为添加delta是非常准确的,因为libgdx停止测量delta和它再次开始测量delta之间可能会损失一些时间,在这种情况下,它会随时间漂移

不知道为什么你的速度要快一倍。。。我知道渲染调用每秒调用60次。也许delta考虑每秒30帧

顺便说一句,还有getRawDeltaTime() 这会给你一些更准确的信息


更新:正如Christian所评论的,您需要除以1000以获得秒分辨率,而不是毫秒分辨率。

您可以使用包装器TimeUtils

获取当前时间:

long startTime = TimeUtils.millis();
获取自startTime以来经过的时间:

long elapsedTime = TimeUtils.timeSinceMillis(startTime);

TimeUtils是可移植性所必需的。如果计划在多个平台上部署,请避免使用系统类。出于这个原因,LibGdx也有自己的数组类

示例:

public long time;
time = TimeUtils.nanoTime();
来自维基:

类TimeUtils“包装在System.nanoTime()和 System.currentTimeMillis()。如果希望兼容,请使用此选项 跨越所有平台!”


你使用的是LiBGDX屏幕吗?别忘了除以1000,以秒为单位得到结果,如我在回答中所示。对-没有注意到他想要秒分辨率。我将更新答案我将使用System.nanoTime(),System.currentTimeMillis是错误的。检查。