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