2014-02-10 4 views
0
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 объекта добавил я хочу, чтобы очистить интервал и остановить функцию, но я имею проблему и функция setInterval является не останавливаетсяsetInterval функция не прекращая

ответ

0

Поскольку проверка не находится внутри обновляемого кода. 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(); 
+0

Потрясающие, спасибо за downvote за правильный ответ! – epascarello

+1

+1. А-1 для этого ответа не объясняет просто для переменного столкновения несправедливо. Наверное, вместо нисходящего слова простой комментарий, указывающий на проблему, был бы более полезен и для OP – fcalderan

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); 
+0

downvoter заботится, чтобы объяснить его downvote? Поэтому я могу улучшить свой ответ, если это необходимо. – fcalderan

+0

Не downvoter, но ваш код все равно не очистит интервал. – epascarello

+0

@epascarello так почему этот код останавливается, когда он достигает 4? http://codepen.io/anon/pen/IdfHt – fcalderan

0

в вашем случае и может использовать SetTimeout вместо этого setInterval нравится эта

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

    setTimeout(function() { 
     lvl1count++; 
     //stuff 
     if(lvl1count++ <= 5) { 
      Level1(); 
     } 
    }, 1000); 
} 
Смежные вопросы