2012-05-30 187 views
0

如何爲HTML5 Canvas遊戲創建好計時器? 我正在使用RequestAnimationFrame(http://paulirish.com/2011/requestanimationframe-for-smart-animating/HTML5畫布遊戲計時器

但是對象的移動速度太快。

喜歡的東西我的代碼是:

http://pastebin.com/bSHCTMmq

但是,如果我按UP_ARROW播放器不移動一個像素,但移動5,8,或10個或更多或更少的像素。如果按UP_ARROW播放器移動1個像素怎麼辦?

感謝您的幫助。

+1

我個人從計時器(大致的時間間隔)和每個主要「事件」(用戶密鑰,服務器發送的其他玩家數據等)調用我的重繪函數。 –

+0

請參閱! http://stackoverflow.com/questions/19764018/controlling-fps-with-requestanimationframe – Hydro

回答

0

問題是,您在每個間隔增加值的方法會產生不一致的結果。聽起來就像在你的情況RequestAnimationFrame觸發速度太快,但在其他情況下 - 如在一個慢CPU - 他們會觸發較慢,給出不同的結果。

所以,遊戲動畫需要基於「絕對」時間。也就是說,當UP_ARROW被按下時,你需要「記住」以及玩家在那一刻的位置。然後,當您調用update()時,確定經過了多長時間,並基於此,以及所需的速度(以每秒像素數爲單位),將播放器移動到適當的位置。它使你的代碼更加複雜,但不幸的是,這就是它如何完成的。

這個問題在網上討論很多。這裏有一篇我發現的隨機文章(基於Flash,但沒關係): http://www.flashgamesclassroom.com/classroom/actionscript/frame-based-vs-time-based-animation/

你可以谷歌「基於時間的遊戲動畫」來研究更多。