如何在 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());
}