setInterval函数没有停止

时间:2014-02-10 14:14:52

标签: javascript

Level1();
var lvl1count = 0;
function Level1() {

    var x = setInterval(function () {
        lvl1count++;
        var x = 84 + (Math.random() * (cw - 27));
        var y = 84 + (Math.random() * (ch - 27));
        Enemies.add(new Enemy(x, y, 1, 90));
    }, 1000);
    if (lvl1count == 4) {
        console.log("finish");
        clearInterval(x);return;
    }
}

我试图在每隔1000毫秒添加一个对象,当有4个对象添加时我想清除Interval并停止该功能但是我遇到问题并且setInterval功能没有停止< / p>

3 个答案:

答案 0 :(得分:0)

因为if检查不在正在更新的代码中。仅在调用if (lvl1count == 4)时检查Level1。在你的间隔内移动支票,它会工作。您还需要更改变量名称,以免它们发生冲突。

function Level1() {

    var timer = setInterval(function () {
        lvl1count++;
        var x = 84 + (Math.random() * (cw - 27));
        var y = 84 + (Math.random() * (ch - 27));
        Enemies.add(new Enemy(x, y, 1, 90));

        if (lvl1count == 4) {
            console.log("finish");
            clearInterval(timer);
            return;
        }


    }, 1000);
}
var lvl1count = 0;
Level1();

答案 1 :(得分:0)

当您调用if函数时,您的最新Level1语句只执行一次。因此,每次调用lvl1count内的函数时,都需要检查计数器(setInterval变量):

var x = setInterval(function () {
    lvl1count++;
    var x = 84 + (Math.random() * (cw - 27));
    var y = 84 + (Math.random() * (ch - 27));
    Enemies.add(new Enemy(x, y, 1, 90));

    if (lvl1count == 4) {
      console.log("finish");
      clearInterval(x);
      return;
    }
}, 1000);

注意:正如@epascarello所指出的,这需要更改变量名称。由于您已在函数内部使用x,因此请使用其他变量更改setInterval赋值,例如

var anotherVariable = setInterval(function () {

clearInterval(anotherVariable);

答案 2 :(得分:0)

在你的情况下你可以使用setTimeout而不是像这样的setInterval

Level1();
var lvl1count = 0;
function Level1() {

    setTimeout(function () {
        lvl1count++;
        //stuff
        if(lvl1count++ <= 5) {
            Level1();
        }
    }, 1000);
}