【发布时间】:2014-12-15 11:40:34
【问题描述】:
在我的 Opengl“引擎”中,我有以下方法来计算所有时间值,我可能需要在一帧中:
public static void computeTime(){
thisFrame = System.nanoTime();
delta = thisFrame - lastFrame;
lastFrame = thisFrame;
deltams = (float) (delta / 1e6);
deltas = (float) (delta / 1e9);
fps = (float) 1e9 / delta;
ticksInSeconds += deltas;
}
我在每一帧的开头调用这个方法。 然后我使用增量值来计算运动和事物。
这是执行此操作的正确方法吗?还是我在计算顺序上遗漏了一些东西?因为我觉得运行应用程序有点滞后......所以它不可能完全正确,不是吗?
【问题讨论】:
-
可能
System.currentTimeMillis可以为您节省一些性能并且不会不准确。 -
我不认为 nanoTime() 比 currentTimeMillis() 慢很多...
-
@cy3er:两者都有点不准确,不幸的是,Java 不保证这些计时器是单调的。在某些情况下,它们可能会在短时间内倒退。然而,在这两者中,
nanoTime (...)遇到问题的可能性较小 - NTP 时间同步不会突然将计时器使用的时钟设置回 1-5 秒。 -
delta是什么类型。如果它是整数类型,那么deltas可能总是为零,并且在非常高的帧速率下deltams会浪费大量时间。 -
delta 是一个浮点数,别担心。
标签: java opengl lwjgl game-engine game-loop