2014-12-06 51 views
0

我只是希望在這裏指出正確的方向。我是一個JavaScript的初學者,所以有一些基本的東西我不理解。谷歌搜索似乎沒有幫助,因爲顯然這個問題從來沒有真正問過。如何停止並啓動某個功能?

我有一個遊戲,一旦按下Go按鈕,就有60秒的倒計時。現在,當60秒倒計時正在運行時,我想運行一個函數orientationStuff(),它可以處理orientationchange上的各種東西。這是沒有問題的......但是,我只想要orientationStuff()在60秒倒計時期間運行。所以一旦它達到0,沒有更多的orientationStuff()正在進行。但是,一旦你點擊再去想倒計時再次(並因此開始orientationStuff()

+0

我不能uderstand你綁做什麼,你可以展示你的代碼? _這個問題從來沒有真正問過_相信我這是一個沒有,只是你的問題是不夠清楚 – 2014-12-06 01:23:16

+0

什麼是orientationStuff函數做,並且是你的問題中的代碼。如果它在屏幕上像動畫一樣做東西,你可以使用empty()或remove()來使用超時函數在60秒後清除DOM。 – Tasos 2014-12-06 01:55:37

回答

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相同的塊中。 – 2014-12-06 01:29:35

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) 
}); 

我猜你可能想停止計時器 - 比方說玩家贏了遊戲。在這種情況下,您就可以通過定時器的「ID」,你可以使用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()不會重複運行代碼,而是等待指定的毫秒數,然後運行一次函數。 – 2014-12-06 01:31:19

+0

@GwiddleWorker,這正是OP要求的。點擊go按鈕再次啓動定時器。 「但是,一旦你再次點擊開始我想倒計時重新開始」 – Jamiec 2014-12-06 01:31:49

+0

除了'setTimeout()'是非常不精確的,我相信只有當JS調用堆棧當前爲空時纔會執行,如果有足夠的遊戲,這可能永遠不會發生活動發生。 – 2014-12-06 01:33:02

0

嘗試使用setTimeout 60秒,並切換提供orientationStuff()時看到的布爾值。

如果setTimeout位於一個函數內,您可以簡單地重置布爾值並重新運行該按鈕上的函數。

UPDATE

var orientationAllowed = false; 
function orient() { 
    orientationAllowed = true; 
    setTimeout(function(){ 
    orientationAllowed = false; 
    },60000); 
}