Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 时间间隔过快_Javascript_Setinterval_Clearinterval - Fatal编程技术网

Javascript 时间间隔过快

Javascript 时间间隔过快,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,我是JS新手,决定从制作一个小游戏开始学习。我正在使用setInterval自动执行敌人的攻击。对于他们的第一次攻击,间隔是正确的,但是在第二次攻击之后,间隔会加速到一秒钟攻击三次或更多。当玩家或敌人的生命值达到0时,我也无法停止间歇 这里几乎是所有与我的问题相关的代码。整个代码都可以找到 函数deadFunct(){ 如果(你的健康状况0.33){ 敌人=“弓箭手”; eAcc=.80; eDmg=3; 速度=1750; y=“你的健康=”+yourHealth+“| |”+敌人+”=“+en

我是JS新手,决定从制作一个小游戏开始学习。我正在使用setInterval自动执行敌人的攻击。对于他们的第一次攻击,间隔是正确的,但是在第二次攻击之后,间隔会加速到一秒钟攻击三次或更多。当玩家或敌人的生命值达到0时,我也无法停止间歇

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

函数deadFunct(){
如果(你的健康状况0.33){
敌人=“弓箭手”;
eAcc=.80;
eDmg=3;
速度=1750;
y=“你的健康=”+yourHealth+“| |”+敌人+”=“+enemyHealth+”
”; document.getElementById(“攻击”).innerHTML=y; }否则{ 敌人=“狂暴者”; eAcc=.66; eDmg=7; 速度=2500; y=“你的健康=”+yourHealth+“| |”+敌人+”=“+enemyHealth+”
”; document.getElementById(“攻击”).innerHTML=y; } } 函数enemyAttackFunct(){
对于(var i=0;i您不应该在动画中使用setInterval

只需使用
requestAnimationFrame
即可!

    • 您再次继续调用“setInterval”。每个调用都是并行运行的

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

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

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