我正在构建一个浏览器宠物饲养游戏。我的计划是使用 if/else 来确定宠物的 HP 掉落率应该是多少。如果低于一定的饥饿/幸福,HP会越来越快地下降。
我正在使用变量 setInterval,里面的值没有更新,但打印到控制台时值正在更新。
let hp = 100;
let dropHPWeight = 6000;
let dropHPCall = setInterval(dropHP, dropHPWeight);
function dropHP() {
hp = (hp % 360) - 1;
console.log(dropHPWeight);
dropHPWeight = dropHPWeight + 6000;
}
在这里,我每 6 秒降低一次 HP,然后作为测试,我看看它是否会增加,但它没有。
我哪里出错了?
正如一些人在评论中提到的,一旦启动setInterval
,就无法更改间隔。 你最好使用setTimeout
. 喜欢这个:
let hp = 100;
let dropHPWait = 6000;
function dropHP() {
hp = (hp % 360) - 1;
dropHPWeight = dropHPWait + 6000;
if (somecondition){
setTimeout(dropHP, dropHPWait)
}
}
dropHP()
现在你调用dropHP
,这会改变间隔,然后在给定增量后使用setTimeout
再次调用自身。 我将setTimeout
放在一些条件中,因为您不希望它永远运行(因此您必须决定希望它在什么时候停止运行(。