ClearInterval после 10 секунд не работает

Я создал небольшую Игру, и это должно создать каждые 1сек врага, пока не будет 10 врагов (10 секунд), если я сделаю это без clearInterval, это создаст целые вражеские врата, поэтому я хочу остановиться, когда достигнет 10

var initEnemy = function ()
{
 //enemy div
 for(var i = 0; i < 10; i++)
 var timerid = null;
 function IntervalFunction()
 {
 var randomX = Math.floor(Math.random() * 190);
 var randomY = Math.floor(Math.random() * 50);
 enemy.push(new Enemy(randomX, randomY).create());
 }
 IntervalFunction();
 setInterval(IntervalFunction,1000);
 clearInterval(IntervalFunction),10000);
}
1 ответ

clearInterval не принимает второй аргумент.

И setTimeout легче обернуть вокруг... Простой подход - подсчитать, сколько врагов вы создали до сих пор и не запускать setTimeout когда достигнут предел:

var initEnemies = function () {

 var numEnemiesCreated = 0;

 function createAnotherEnemy() {
 var randomX = Math.floor(Math.random() * 190);
 var randomY = Math.floor(Math.random() * 50);
 enemy.push(new Enemy(randomX, randomY).create());

 numEnemiesCreated += 1;
 if (numEnemiesCreated < 10)
 setTimeout(createAnotherEnemy, 1000);

 }

 createAnotherEnemy();
}

И версия с циклом for, она планирует вызовы функций 0s, 1s, 2s,..., 9s:

var initEnemies = function () {

 function createEnemy() {
 var randomX = Math.floor(Math.random() * 190);
 var randomY = Math.floor(Math.random() * 50);
 enemy.push(new Enemy(randomX, randomY).create());
 }


 for (var i=0; i < 10; i++)
 setTimeout(createEnemy, i * 1000);
}

Обновить

Здесь версия с setInterval и clearInterval. Вам еще нужно подсчитать, сколько врагов вы создали до сих пор, и вам нужно использовать идентификатор интервала в вызове clearInterval. Не проверял это, извините!

var initEnemies = function () {
 var numEnemiesCreated = 0;
 var intervalId;

 function createEnemy() {
 var randomX = Math.floor(Math.random() * 190);
 var randomY = Math.floor(Math.random() * 50);
 enemy.push(new Enemy(randomX, randomY).create());

 // Unschedule ourselves after 10th run
 numEnemiesCreated += 1;
 if (numEnemiesCreated == 10)
 clearInterval(intervalId); 
 }


 intervalId = setInterval(createEnemy, 1000);
}

licensed under cc by-sa 3.0 with attribution.