2016-11-06 4 views
1

У меня есть 3 setInterval функции, объявленные глобально, 2 из них работают, другой не работает независимо от того, что я делаю. Я использую отдельную функцию, чтобы очистить интервалы (функция ClearintervalTime()), которая называется в StopGame()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

набор clearGameInterval1 до 0 и проверить – Geeky

ответ

1

прошествию более чем на 2 дня по этому вопросу, я, наконец, нашел error..and все это было мне :(Я начал игру, и игра против gameDuration() в StartGame();.

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

}; 

}; в difficultyLevel (bubbleSpawnInterval) я очищал все 3 интервалов, но я устанавливал другие 2 (которые работают) в одной и той же функции, в то время как счетчик интервалов все еще очистили ... Я просто пришлось поместить функцию gameDuration() после трудностиLevel (bubbleSpawnInterval), чтобы она работала.

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

 Смежные вопросы

  • Нет связанных вопросов^_^