如何在 Java 中获得准确的 deltaTime
How to get accurate deltaTime in Java
不久前我刚学完 Java,现在我正在制作我的第一个 java 游戏。问题是当我尝试在主循环中获取增量时间时,增量时间通常为 0。我该如何解决这个问题?我的主循环代码:
double deltaTime=0;
while(!windowIsClosed){ //main loop
double beginTime=System.nanoTime()/1e9; //divide by 1e9 because I want time variables to be in seconds
animations(deltaTime);
repaint();
double endTime=System.nanoTime()/1e9;
deltaTime=endTime-beginTime;
您在 while 循环开始时覆盖了 beginTime,因此您现在计算的是动画完成所需的时间。
如果您想从开始 while 循环开始计算增量,您应该将 beginTime 的赋值放在 while 之上。
此外,如果您使用的是 Java 8,则可以使用新的 Date/Time-API 并使用 类 之类的 Instant 来存储开始和结束时间,并使用 Duration 来计算持续时间在两个时间点之间:
Duration deltaTime = Duration.ZERO;
Instant beginTime = Instant.now();
while(!windowIsClosed){
animations(deltaTime);
repaint();
deltaTime = Duration.between(beginTime, Instant.now());
}
不久前我刚学完 Java,现在我正在制作我的第一个 java 游戏。问题是当我尝试在主循环中获取增量时间时,增量时间通常为 0。我该如何解决这个问题?我的主循环代码:
double deltaTime=0;
while(!windowIsClosed){ //main loop
double beginTime=System.nanoTime()/1e9; //divide by 1e9 because I want time variables to be in seconds
animations(deltaTime);
repaint();
double endTime=System.nanoTime()/1e9;
deltaTime=endTime-beginTime;
您在 while 循环开始时覆盖了 beginTime,因此您现在计算的是动画完成所需的时间。 如果您想从开始 while 循环开始计算增量,您应该将 beginTime 的赋值放在 while 之上。
此外,如果您使用的是 Java 8,则可以使用新的 Date/Time-API 并使用 类 之类的 Instant 来存储开始和结束时间,并使用 Duration 来计算持续时间在两个时间点之间:
Duration deltaTime = Duration.ZERO;
Instant beginTime = Instant.now();
while(!windowIsClosed){
animations(deltaTime);
repaint();
deltaTime = Duration.between(beginTime, Instant.now());
}