我有5個精靈(5塊,每一個比以前小)。 他們繪圖太快。如何正確使用新的日期(),getMilliseconds或其他方法的計時器,將繪製一些延遲?計時器與新日期()在js
例如,
for (i = 0; i < 5; i ++) {
xxx.drawImage(sprite, i, etc);
}
我有5個精靈(5塊,每一個比以前小)。 他們繪圖太快。如何正確使用新的日期(),getMilliseconds或其他方法的計時器,將繪製一些延遲?計時器與新日期()在js
例如,
for (i = 0; i < 5; i ++) {
xxx.drawImage(sprite, i, etc);
}
使用setInterval()
或setTimeout()
來設置計時器。但是,由於JavaScript的單線程特性,您應該注意到這兩個函數之間的細微差別。讓我們來看看這個例子:
setTimeout(function test() {
//your code
setTimeout(test, 100);
}, 100);
setInterval(function() {
//your code
}, 100);
這些代碼2塊似乎是一樣的,但是這不是這種情況是因爲JavaScript的單線程性質。
與setInterval()
:如果您的代碼正忙於執行並需要很長時間才能完成。當您的代碼仍在執行時,下一個時間間隔可能會觸發,並且這些時間間隔將排隊等候。最後,你可能最終在連續運行某些處理程序沒有任何延遲
隨着setTimeout()
:下一個時間間隔設置爲僅當你當前的代碼已經完成被解僱。這保證了下一次執行永遠不會小於間隔(在這種情況下爲100),只等於或者更長。
這就是不會在一個週期工作 函數main(){ 的setTimeout(功能測試(){ \t的console.log( '試驗'); \t的setTimeout(測試,1000); },1000) ; requestAnimFrame(main); } 超時執行1000ms後1次,然後函數執行沒有延遲...抱歉,那個爛攤子......不能回答,只是評論( –
@Rss_game_dev:你不應該這樣做。 ){setTimeout(function test(){console.log('test'); requestAnimFrame(variable); setTimeout(test,1000);},1000);}'。我假設'requestAnimFrame'是你繪製的邏輯圖像,將參數更改爲另一個名稱(例如,'variable'),以避免名稱與'main'函數衝突 –
我只是試着做代碼,但括號中的RequestAnimationFrame需要定期執行的函數名。函數main(){RequestAnimationFrame(main)}那是行得通的,但是這個函數怎麼在1000ms後每次調用'test'。不是一次 –
看一看:http://stackoverflow.com/questions/24849/is-there-some-way-to-introduce-a-delay-in-javascript – Cherniv
使用的setInterval() – Virus721
也許並不相關到你的問題,但你應該使用'var'聲明變量:'for(var i = 0; i <5; i ++)' – rexcfnghk