2014-03-31 72 views
0

我正在做一個小遊戲,當我遇到這個問題時,我正在製作一個角色死亡序列。Javascript代碼執行暫停問題

eloop(setInterval(e_seq,100) 

播放結束順序。之後,我想在執行之前停止一秒,然後再顯示樂譜和內容。 但是我正在使用的當前睡眠方法會暫停整個執行過程,包括循環,而我希望在暫停遊戲一秒之前完成循環。

其中睡眠被稱爲地點:(主gameloop內)

eloop=setInterval(e_seq,100); 
sleep(1000); 

睡眠方法:

function sleep(msec) 
{ 
var time= new Date().getTime(); 
while(time+msec>= new Date().getTime()) 
{} 
} 

任何解決方案?

PS:調用sleep在gameloop結束(內部的,如果條件檢查)被暫停執行之前gameloop開始出於某種原因....

+0

例如,您應該閱讀一些關於'setTimeout'的文檔,例如[this one](https://developer.mozilla.org/en-US/docs/Web/API/Window.setTimeout)。 – Biduleohm

+0

查看'window.requestAnimationFrame',這是一個非常高效的動畫循環。它會爲每個循環發送一個時間值,以便對死亡順序進行細粒度控制。您可以使用該時間值計算可用於開始暫停 - 重新開始動畫的已用時間。 – markE

回答

1

我想你可能想沿線更多的東西的

setTimeout(function() { e_seq(); }, 1000); 

這將等待一秒鐘,然後執行e_seq()函數,我認爲這是你的代碼的目的,但它是開放的,以一個小的解釋...

0

你有沒有嘗試只setInterval?

setInterval(function(){ ... }, 3000); 
0

我已經試過的東西

var looper; 
var looptime = 2000; 

var doloop = function(){ 
    console.log("doing this") 
} 

function begin(callthis){ 
    looper = setInterval(callthis,looptime);  
} 

function pause(callthis,sleeptime){ 
    clearInterval(looper); 
    setTimeout(function(){ 
     looper = setInterval(callthis,looptime); 
    },sleeptime) 
} 

使用,如:

begin(doloop); 

pause(doloop,10000); 
0

您使用 「休眠」 功能時,需要一個回調暫停。 JavaScript中不存在睡眠概念。

您不應該像使用繁忙循環那樣使用其他進程,並且JavaScript是單線程的(包括DOM更新)。使用定時器,但作爲定時器是異步的,你將不得不使用提到的回調。

這不是那麼複雜 -

修改睡眠的方法是這樣的:

function sleep(timeout, callback) { 
    setTimout(callback, timeout); // or just call this directly... 
} 

(你可以看到這是一個有點多餘的與包裝物,所以我會建議只調用setTimeout()直接)。

現在你可以實現你的分數屏幕變成一個功能:

function showScores() { 
    ... 
} 

然後,當你想展示的高分屏之前延遲第二做:

sleep(1000, showScores); 

或者乾脆:

setTimeout(showScores, 1000); 

請注意,在調用此方法後,其餘代碼將繼續,因此請確保將代碼駐留在函數中,以便您可以將它們用作回調函數。