为什么setTimeout在JavaScript中多次调用时不起作用?

时间:2013-05-27 03:52:44

标签: javascript methods settimeout

我有一个编程问题,不是太先进。出于某种原因,当我执行以下代码时,setTimeout方法仅在第一次调用时创建暂停。当再次调用它时,setTimeout在执行它的函数之前不会创建暂停。有谁知道为什么会这样,以及如何解决这个问题?

另外,是否有可能创建一个在每次执行前暂停的while循环? 我的代码如下。

var slaying = true;
var youHit = Math.floor(Math.random()*4 + 1);
var damageThisRound = Math.floor(Math.random()*5 + 1);
var totalDamage = 0;
var timer1 = null;


function swing(percentOfMiss) {

此if语句采用参数除以25.因为youHit最初生成一个 1到4之间的整数,如果我们将参数设置为25,我们将得到1/4(25%)的镜头 想念龙。如果它被设置为50,我们将有一个四分之二(50%)的射击错过龙等...

为了增加遗失的可能性,只需在调用函数时提高参数编号。 * /

if (youHit <= parseFloat(percentOfMiss) / 25) {     
    //youHit is set to 0, or false
    youHit = 0;
} else {

如果youHit生成的随机数高于等号右边的数字,则youHit设置为1,或者为true。

    youHit = 1;
}

}

该功能的目的:启动战斗回合。检查我们是否击中了龙,我们做了多少伤害,以及龙是否已经死亡。每2秒开始一次新的战斗转弯。在最后一次战斗转弯时,将“Game Over”记录到控制台。

function attack(roundTime) {
if (slaying) {
    if (youHit) {
        console.log("You hit the dragon!");
        totalDamage += damageThisRound;
        console.log("You did " + damageThisRound + " damage this round.");
        if (totalDamage >= 4) {
            console.log("You slew the dragon! Congrats!");
             //If you killed the dragon, stop slaying by breaking the while loop...
            slaying = false;
            //...and call the next combat turn. This will log "Game Over".
            timer1 = setTimeout(attack, roundTime);
        } else {
            //Otherwise if the dragon's still alive, set new damage for this round...
            damageThisRound = Math.floor(Math.random()*5 + 1);
            //...see if you hit the dragon...
            youHit = Math.floor(Math.random()*4 + 1); 

......并召回攻击()。在roundTime指定的时间后调用攻击。                 这会在程序中造成延迟,从而产生战斗转向的幻觉。* /

            timer1 = setTimeout(attack, roundTime);
        }    
    } else {
        //If you miss, the dragon kills you...
        console.log("You missed... and the dragon killed you. Sorry.");
        //... and we break the while loop by setting slaying to false...
        slaying = false;
        //...and call next combat turn. This will log "Game Over".
        timer1 = setTimeout(attack, roundTime);
    }
} else {

当杀戮设置为false时,我们现在在下一个(也是最后一个)转弯时打印Game Over。

    console.log("Game Over");
}

}

火焰摆动和攻击功能

swing(25);
attack(1500);

0 个答案:

没有答案