setInterval太快了

时间:2014-01-13 19:36:07

标签: javascript setinterval clearinterval

我是JS的新手,并决定开始通过制作小游戏来学习。我正在使用setInterval来自动化敌人的攻击。对于他们的第一次攻击,间隔是正确的,但是在第二次攻击之后,它加速攻击几乎三次或更多,一秒钟。一旦玩家或敌人的健康状况达到0,我也无法停止间隔。

这里几乎是关于我的问题的所有代码。整个代码可以找到here

function deadFunct(){
if(yourHealth <= 0){
    window.alert("You dead");
    clearInterval(fightAuto);
    clearInterval(deadAuto);
}
if(enemyHealth <= 0){
    window.alert("The enemy is dead");
    clearInterval(fightAuto);
    clearInterval(deadAuto);
}
}

function nextFunct(){
document.getElementById("nextBtn").disabled=true;
document.getElementById("swordBtn").disabled=false;
document.getElementById("bowBtn").disabled=false;
document.getElementById("hamBtn").disabled=false;
var a=Math.random();
if(a>0.66){
    enemy="Knight";
    eAcc=.75;
    eDmg=5;
    eAttackSpeed=2000;
    y= "Your health = " + yourHealth + " || "+ enemy +" = " + enemyHealth + "<br>";
    document.getElementById("attack").innerHTML=y;
}else if(a>0.33){
    enemy="Archer";
    eAcc=.80;
    eDmg=3;
    eAttackSpeed=1750;
    y= "Your health = " + yourHealth + " || "+ enemy +" = " + enemyHealth + "<br>";
    document.getElementById("attack").innerHTML=y;
}else{
    enemy="Berserker";
    eAcc=.66;
    eDmg=7;
    eAttackSpeed=2500;
    y= "Your health = " + yourHealth + " || "+ enemy +" = " + enemyHealth + "<br>";
    document.getElementById("attack").innerHTML=y;
}
}

function enemyAttackFunct(){
for(var i=0; i<1;i++){
if(enemy == "Archer"){
    fightAuto = setInterval(function(){aAttackFunct()},eAttackSpeed);
    document.getElementById("test").innerHTML=eAttackSpeed;
}else if(enemy == "Knight"){
    fightAuto = setInterval(function(){kAttackFunct()},eAttackSpeed);
    document.getElementById("test").innerHTML=eAttackSpeed;
}else{
    fightAuto = setInterval(function(){bAttackFunct()},eAttackSpeed);
    document.getElementById("test").innerHTML=eAttackSpeed;
}
}
}

2 个答案:

答案 0 :(得分:2)

你再次再次调用'setInterval'。每个呼叫都是并行运行的。

如果您有多个战士同伴类型(射手,骑士等),请创建一个阵列,每个阵列都有一个单独的设置间隔。

如果情况确实如此,您只有一个并且每回合随机播放,请在每个clearInterval之前添加setInterval

答案 1 :(得分:0)