0

我创建了一个小游戏,它应该每 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);
}
4

1 回答 1

0

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通话中使用间隔 id。这个没测试过,不好意思!

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);
}
于 2013-09-02T10:29:11.963 回答