我正在建立一个恩惠系统,让玩家获得一个随机的恩惠/ buff 30秒,然后它自行移除。我有最初的恩惠,它持续30秒,然后自行移除。我推出了这个名字" Healing Boon"到一个空的player.boons = []
数组。
然而,反过来我遇到了困难。让我们说敌人想要" debuff"我的角色,并立即删除恩惠。好吧,因为我的恩惠倒计时持续30秒,它继续工作直到30秒为止,即使我给出去除的外观。 (我仍然保持健康长达30秒)。
我将此归因于setTimeout
函数。如果我输入30秒,即使稍后下线(比如说5-10秒之后),也可以setTimeout = 0;
,它将在接下来的30秒内继续播放。仅在最初的第二次尝试时setTimeout
设置为0.但这不是我想要的。我想要一个系统,它可以完全阻止它的束缚,并移除它给予玩家的任何当前的健康增益。
function applyBoonHealing(){
var blessedWind = setInterval(function(){
player.cc.hp += 1;
dom.setText("healthcounter", player.cc.hp);
}, 1000);
player.boons.push("Healing Boon");
postPlayerStatusEffectImage("images/lowerstrengthicon.jpg", "buff", "0", "2", "no");
dom.setText("healthcounter", player.cc.hp);
setTimeout(clearBoon, 30000);
function clearBoon(){
clearInterval(blessedWind);
if (player.boons.includes("Healing Boon", 0)){
var arrayIndex = player.boons.indexOf("Healing Boon", 0);
player.boons.splice(arrayIndex, 1);
}
dom.setText("healthcounter", player.cc.hp);
postPlayerStatusEffectImage("images/lowerstrengthicon.jpg", "buff", "0", "2", "yes");
}
}
答案 0 :(得分:3)
clearTimeout()方法是解决这个问题的方法:
var boonHandle = setTimeout(clearBoon, 30000);
(...)
clearTimeout(boonHandle); //To cancel your timer
答案 1 :(得分:0)
您可以使用 clearTimeout()方法,
var mySetTimeoutFunc = setTimeout(clearBoon, 30000);
要停止此操作,您只需clearTimeout(mySetTimeoutFunc);
了解更多信息,请参阅此http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_settimeout_cleartimeout2
答案 2 :(得分:0)
clearTimeout 是一个停止超时的事件,见下文
function myStopFunction() {
clearTimeout(myVar);
}