java 当我切换到暂停状态时,如何停止计时器倒计时?

a2mppw5e  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(210)

我有一个java游戏,其中有一个从60秒开始的倒计时器。它工作正常,但当我暂停游戏并返回播放状态时。原来的时间现在减少了,因为我发现无论我处于什么游戏状态,计时器仍然保持从系统运行。我如何修复这个问题?
我尝试过在切换状态时将remainingTime存储到pauseTime变量中,然后减去它,但我的努力似乎失败了。

// GET ELAPSED TIME
        if(gp.gameState == gp.playState && remainingTime >= 0) {
            soundCounter--;
            elapsedTime = System.currentTimeMillis() - startTime;
            remainingTime = totalTime - elapsedTime;
            if(remainingTime <= 0) {
                remainingMilliseconds = 0;
                remainingSeconds = 0;
                remainingMinutes = 0;
                // GAME OVER
                gp.gameOver();
            } else {
                remainingMilliseconds = remainingTime % 1000;
                remainingSeconds = (remainingTime / 1000) % 60;
                remainingMinutes = (remainingTime / 1000) / 60;
            }
        }
        // DRAW TIMER
        timeString = String.format("%02d:%02d:%03d", remainingMinutes, remainingSeconds, remainingMilliseconds);
yjghlzjz

yjghlzjz1#

您的问题是,您一直在计算从第一个startTime开始的经过时间。
解决方案之一是计算循环迭代之间的增量(差异)时间。
下面是一些非常原始的代码,可以帮助您入门:

public static void main(String[] args) {
    boolean paused = false;
    long lastRun = System.currentTimeMillis();
    long elapsed = 0;

    System.out.println("Game start");

    while (true) {
        long now = System.currentTimeMillis();
        long delta = now - lastRun;

        if (!paused && delta > 0) {
            elapsed += delta;

            // Do game stuff
            System.out.println("Elapsed: " + elapsed);
            if (elapsed >= 5000) return;
            lastRun = now;
        }
    }
}

相关问题