2016-11-06 2 views
1

전역으로 선언 된 세 개의 setInterval 함수가 있고 그 중 두 개는 작동하고 다른 함수는 내가하는 일과 상관없이 작동하지 않습니다. 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에 도달했을 때뿐만 아니라 buttonclick에서도 간격을 닫고 싶습니다. clearInterval (clearGameInterval1)을 주석 처리하면 위의 코드를 그대로두고 카운터를 시작하지 않습니다. ClearintervalTime()에서 카운터가 시작되지만 멈출 수 없거나 지울 수 없습니다 ... 문제를 해결하려고합니다. 같은 이름을 가진 다른 변수 나 함수는 없으며 동일한 효과를 내기 위해 gameDurationCounter()를 외부 (클로저가 아님)로 가져 오려고했습니다. 누군가가 무슨 일이 일어나고 있는지, 무슨 일이 일어나고 있는지 말해 줄 수 있습니까?

+0

그리고 어떻게'gameDuration'이 불려지나요? 간격을 먼저 지우지 않고 해당 함수를 계속 호출하면 전역에 새 간격을 계속 추가하고 이전 간격의 처리기가 손실되며 더 이상 지울 수 없습니다. – adeneo

+0

동시에 여러 게임을 실행 중이십니까? 아니면 한 번에 하나의 게임 만 실행할 수 있습니까? 실행할 수 있고 문제를 재현 할 수있는 스 니펫을 제공하면이 질문이 훨씬 더 명확 해집니다. – trincot

+0

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 대향 간격이 아직 해제하면서, 같은 함수 (작동되었는지) ... I 단지 설정했다 어려움 레벨 (bubbleSpawnInterval) 다음에 gameDuration() 함수를 추가하여 작동하게해야합니다.

관련 문제