2016-11-06 7 views
1

3つのsetInterval関数がグローバルに宣言されています。そのうち2つは機能していますが、他の関数は機能しません。 stopGameに呼ばれて、私は間隔をクリアするために別の関数を使用しています(関数ClearintervalTime())、()グローバルとして宣言されたときにsetIntervalが機能しない

var clearIntervalvariable0, clearIntervalvariable1, clearGameInterval1=null; 

function gameDuration() { 
    counter = 90; 
    clearGameInterval1 = setInterval(gameDurationCounter, 1000); 

    function gameDurationCounter() { 
     counter--; 
     document.getElementById('timer').innerText = 'Time remaining:' + counter; 
     speed(); 
     if (counter == 0) { 
      stopGame(); 
      // clearInterval(clearGameInterval1); 
      console.log('game was stopped'); 
     }; 
    }; 
}; 

function ClearintervalTime() { 
    clearInterval(clearGameInterval1); 
    clearInterval(clearIntervalvariable0); 
    clearInterval(clearIntervalvariable1); 

}; 
function stopGame() { 
    bubbles.length = 0; 
    noLoop(); 
    ClearintervalTime(); 
}; 

は、このコードは関係なく、私が何をすべきか動作しません、だけでは、それは仕事があることを確認しますもし私がclearGameInterval1をgameDuration()でローカルに宣言し、それをクロージャー関数gameDurationCounter()でコメント行で閉じると、 私はゲームの停止ボタンを持っています。カウンタが0に達するだけでなく、ボタンをクリックするだけでなく、間隔を閉じたいと思います。 上記のコードをそのまま残すと、clearInterval(clearGameInterval1)をコメントアウトするとカウンタが起動しなくなります。 ClearintervalTime()では、カウンタが起動しますが、停止/クリアできません。これを解決しようとしています。同じ名前の他の変数や関数はありません。同じ効果を出すために(閉じていない)gameDurationCounter()を取得しようとしました。誰かが何が起こっているのか教えてください、何がうまくいかないのですか?

+0

そして、 'gameDuration'はどのように呼び出されますか?最初にインターバルをクリアせずにその関数を呼び出し続けると、新しいインターバルをグローバルに追加し続け、古いインターバルのハンドラは失われ、クリアされなくなります。 – adeneo

+0

複数のゲームを同時に実行しているのですか、その時に実行できるゲームは1つだけですか?実行可能な問題を再現するスニペットを提供すると、この質問ははるかに明確になります。 0から – trincot

+0

セットclearGameInterval1、あなたはonclickの添付、この機能を持ってスタートボタンをクリックしたときに – Geeky

答えて

1

この問題で2日以上過ごした後、私は最終的にエラーを見つけました。それはすべて私でした:(私はゲームを開始していました、そしてゲームカウンタ startGame();

function startGame(bubbleSpawnInterval) { 
if (!bubbleSpawnInterval) { 
    alert('Please select a difficulty!'); 
} else { 
    initializingVariavles(); 
    loop(); 
    gameDuration(); 
    randomTimers(bubbleSpawnInterval); 
    difficultyLevel(bubbleSpawnInterval); 

}; 

}; difficultyLevelで (bubbleSpawnInterval)対向間隔がまだクリアしている間、私はすべての3つの間隔をクリアしたが、私は、同じ機能で(働いていた)他の2を設定した...私はちょうど難易度(bubbleSpawnInterval)の後にgameDuration()関数を配置して動作させる必要がありました。

function startGame(bubbleSpawnInterval) { 
    if (!bubbleSpawnInterval) { 
     alert('Please select a difficulty!'); 
    } else { 
     initializingVariavles(); 
     loop(); 
     randomTimers(bubbleSpawnInterval); 
     difficultyLevel(bubbleSpawnInterval); 
     gameDuration(); 
    }; 
}; 
関連する問題