0

我现在正在做一个简单的游戏。它几乎完成了,除了定时器有一个小故障,我不知道它在做什么。当您按下按钮时,画布上的 HTML5 文本开始从 35 倒计时到 0。在第一次运行时它很好。但是,如果您选择再次播放而不刷新,则计时器开始倒计时更快。这是代码。

var timer = 35;

ctx.fillText("Countdown: " + timer, 320, 32);

function resetReggie(){
    reggie.x = canvasWidth / 2;
    reggie.y = canvasHeight / 2;
}

//Starts Timer for Timed Game
function timedMsg()
{
    resetReggie();
    ballsCaught = 0;
    timer = 35;
    alert('Pick up as many as you can in ' + timer + ' seconds');
    countDown();
        var t=setTimeout(function() {
        var again = confirm("TIMES UP! You Gathered " + ballsCaught + " Balls! Play Again?");
            if (again === true){ 
                timedMsg(); 
                resetReggie(); 
            }
                if (again === false){
                resetReggie();
                ballsCaught = 0;
                timer = 35;
                }
        }, timer * 1000);

}

function countDown() {
    if (timer != 0){
        timer-=1;
        setTimeout('countDown()', 1000);
    }
}
4

2 回答 2

1

我认为问题出在一线

    }, timer * 1000);

在评估“计时器”以设置超时时,您的值最多为 34。因为您将其初始化为 35,但随后调用 countDown() 将其减少到 34,所以您调用了 Confirm(),这可能会让“计时器”进一步减少。结果,随后对 timedMsg() 的调用发生得太快了,导致 countDown() 被调用的频率增加了两倍。尝试以下(我在节点中运行它),然后将 4 更改为 6。

function countDown() {
    console.log("Countdown: " + timer, 320, 32);
    if (timer != 0) {
        timer -= 1;
        setTimeout(countDown, 1000);
    }
}
function timedMsg() {
    timer = 5;
    countDown();
    var t=setTimeout(function() {
        timedMsg();
    }, 4 * 1000);
}
timedMsg();
于 2012-07-26T14:43:27.773 回答
0

正如我在评论中提到的,每次您开始新游戏时,您似乎都在减少超时值。结果,这减少了每次的时间。

试试这个:

var timeout = currentTime = 5;
var int = setInterval(function() {
    ​console.log(currentTime);
    currentTime--;
    if(currentTime < 0) {
    var again = confirm('Play again?');
    if(again) {
        currentTime = timeout;
    }
    else {
        clearInterval(int);
    }
    }
}, 1000);​

http://jsfiddle.net/gRoberts/CsyYx/

查看您的控制台(Chrome 中的 F12),或更新代码以写入浏览器以查看它是否正常工作;)

于 2012-07-26T14:30:10.130 回答