【问题标题】:setInterval going too fast [duplicate]setInterval 太快了[重复]
【发布时间】:2014-02-01 16:53:53
【问题描述】:

我是 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;
}
}
}

【问题讨论】:

    标签: javascript setinterval clearinterval


    【解决方案1】:

    你再次调用“setInterval”。每个调用都是并行运行的。

    如果您有多个战士对等类型(弓箭手、骑士等),请创建一个数组,为每种类型设置单独的间隔。

    如果看起来你只有一个,而且他们每回合随机播放,请在每个 setInterval 之前添加 clearInterval

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 2011-08-06
      • 1970-01-01
      • 2021-12-20
      • 2018-02-05
      • 2011-10-07
      • 2013-06-26
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      相关资源
      最近更新 更多