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