2016-12-27 5 views
-1

私は30秒間ランダムなボーナス/バフを得てから自分自身を除去する恩恵のシステムを作っています。私はそれが30秒続くところに最初の利益を持っています、そして、それ自体を取り除きます。私は恵まれた名前「Healing Boon」を空のplayer.boons = []配列に押します。Javascript:どのようにsetTimeout関数をキャンセルするには?

しかし、私は困難に逆行しています。敵は自分のキャラクターを「デバフ」し、瞬時にその恩恵を奪うと言います。私の恩恵のためのカウントダウンが30秒続くので、私は除去の外観を与えても、30秒がアップするまで動作し続けます。 (私はまだ30秒まで健康を得ている)。

私はこれをsetTimeoutの機能に帰しています。 30秒を入力した場合、後で回線が切れても(たとえば5〜10秒後に)、setTimeout = 0;は次の30秒間続きます。最初の2回目の試行では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"); 
     } 
} 

答えて

3

てclearTimeout()メソッドこの問題を解決する:

var boonHandle = setTimeout(clearBoon, 30000); 
(...) 
clearTimeout(boonHandle); //To cancel your timer 
0

てclearTimeoutがタイムアウトを停止するためのイベントである、

function myStopFunction() { 
    clearTimeout(myVar); 
} 
下記参照
関連する問題