2013-08-01 24 views
0

我有5個精靈(5塊,每一個比以前小)。 他們繪圖太快。如何正確使用新的日期(),getMilliseconds或其他方法的計時器,將繪製一些延遲?計時器與新日期()在js

例如,

for (i = 0; i < 5; i ++) { 
    xxx.drawImage(sprite, i, etc); 
} 
+4

看一看:http://stackoverflow.com/questions/24849/is-there-some-way-to-introduce-a-delay-in-javascript – Cherniv

+1

使用的setInterval() – Virus721

+0

也許並不相關到你的問題,但你應該使用'var'聲明變量:'for(var i = 0; i <5; i ++)' – rexcfnghk

回答

0

使用setInterval()setTimeout()來設置計時器。但是,由於JavaScript的單線程特性,您應該注意到這兩個函數之間的細微差別。讓我們來看看這個例子:

setTimeout(function test() { 
    //your code 
    setTimeout(test, 100); 
}, 100); 

setInterval(function() { 
    //your code 
}, 100); 

這些代碼2塊似乎是一樣的,但是這不是這種情況是因爲JavaScript的單線程性質。

  • setInterval():如果您的代碼正忙於執行並需要很長時間才能完成。當您的代碼仍在執行時,下一個時間間隔可能會觸發,並且這些時間間隔將排隊等候。最後,你可能最終在連續運行某些處理程序沒有任何延遲

  • 隨着setTimeout():下一個時間間隔設置爲僅當你當前的代碼已經完成被解僱。這保證了下一次執行永遠不會小於間隔(在這種情況下爲100),只等於或者更長。

+0

這就是不會在一個週期工作 函數main(){ 的setTimeout(功能測試(){ \t的console.log( '試驗'); \t的setTimeout(測試,1000); },1000) ; requestAnimFrame(main); } 超時執行1000ms後1次,然後函數執行沒有延遲...抱歉,那個爛攤子......不能回答,只是評論( –

+0

@Rss_game_dev:你不應該這樣做。 ){setTimeout(function test(){console.log('test'); requestAnimFrame(variable); setTimeout(test,1000);},1000);}'。我假設'requestAnimFrame'是你繪製的邏輯圖像,將參數更改爲另一個名稱(例如,'variable'),以避免名稱與'main'函數衝突 –

+0

我只是試着做代碼,但括號中的RequestAnimationFrame需要定期執行的函數名。函數main(){RequestAnimationFrame(main)}那是行得通的,但是這個函數怎麼在1000ms後每次調用'test'。不是一次 –