2014-12-06 6 views
0

Я просто смотрю, чтобы быть направлен в правильном направлении. Я начинаю с javascript, поэтому есть какая-то фундаментальная вещь, которую я не понимаю. Поиски Google, похоже, не помогли, поскольку, по-видимому, этот вопрос никогда не задавался.Как остановить и запустить функцию?

У меня есть игра, где есть обратный отсчет в 60 секунд после нажатия кнопки Go. Теперь, когда этот 60-секундный обратный отсчет работает, я хочу запустить функцию orientationStuff(), которая делает всевозможные вещи на changechange. Это не проблема ... ОДНАКО

Я хочу, чтобы orientStuff() запускался во время обратного отсчета 60 секунд. Поэтому, когда он достигает 0, больше не будет начата ориентация(). Но как только вы нажмете Go еще раз я хочу, чтобы отсчет времени, чтобы начать снова (и, следовательно, orientationStuff()

+0

Я не могу uderstand, что вы зафиксируете сделать, вы можете показать свой код? Этот вопрос никогда не спрашивается. Поверьте мне, это вопрос, просто ваш вопрос недостаточно ясен. –

+0

Что делает функция orientationStuff и есть код в вашем вопросе. Если его делать на экране, например анимации, вы можете просто использовать empty() или remove(), чтобы очистить DOM через 60 секунд, используя функцию таймаута – Tasos

ответ

2

Попробуйте что-нибудь подобное в Javascript:

var i = 0; //counts every frame at 60FPS 
function countdown() { 
    function frame() { 
     i += 1; //up the frame by 1; 
     /* do stuff; you can use variable switch-based logic to perform different functions*/ 
     if(i > 3599) { /* equivilant of 60 seconds, you can add your own condition in if you want*/ 
      i = 0; 
      clearInterval(looper_interval); //stops 
     } 
    } 
    var looper_interval = setInterval(frame, 16); //this code runs the function frame() every 16 milliseconds 
} 
+0

Да, 'setInterval'. Можем упомянуть, что перед установкой интервала OP должен настроить свои обработчики событий ориентации для запуска кода игры, затем удалить обработчики событий, отобразить экран оценки, независимо от того, что в том же блоке, что и 'clearInterval'. –

2

Простой ответ вы используете setTimeout с функцией, которую необходимо выполнять и 60000 миллисекунды

setTimeout(function(){ 
    // do whatever you want to happen here 
},60000) 

с точки зрения начиная с этого с JQuery, если у вас есть кнопка с классом go вы будете использовать

$(document).on('click','.go',function(){ 
    setTimeout(function(){ 
     // Game over man! GAME OVER!! 
    },60000) 
}); 

Я думаю, вы, вероятно, хотите остановить таймер - скажите, побеждает ли игрок в игре. В этом случае вы захватить «идентификатор» от таймера и вы можете использовать clearTimeout, чтобы остановить его

var gameTimerId = null; 
$(document).on('click','.go',function(){ 
    gameTimerId = setTimeout(function(){ 
     // Hury, before someone calls clearTimeout 
    },60000) 
}); 

/// where the player wins 
clearTimeout(gameTimerId); 

setTimeout запускает функцию один раз. Если вы хотите повторно выполнить функцию, есть аналогичная функция setInterval, которую вы также можете использовать.

+0

Я уверен, что setTimeout() не выполняет многократный запуск кода, а ждет заданного количества миллисекунд, а затем запускает функцию один раз. –

+0

@GwiddleWorker и это именно то, о чем попросил ОП. При нажатии кнопки «Ход» снова запускается таймер. «НО, как только вы снова нажмете« Повторить », я хочу, чтобы обратный отсчет начинался снова» – Jamiec

+0

За исключением 'setTimeout()' ужасно неточно, и я считаю, что он будет выполняться только в том случае, если стек вызовов JS пуст, что может не произойти, если достаточно игры активности. –

0

Попробуйте использовать setTimeout в течение 60 секунд и переключите логическое значение, которое вы смотрите при предоставлении orientationStuff().

Если функция setTimeout находится внутри функции, вы можете просто сбросить логическое значение и повторно запустить функцию на кнопке.

UPDATE:

var orientationAllowed = false; 
function orient() { 
    orientationAllowed = true; 
    setTimeout(function(){ 
    orientationAllowed = false; 
    },60000); 
} 
Смежные вопросы