2011-10-17 104 views
1

嘿,我正在做我的第一個2D Java遊戲,我目前使用計時器來控制和更新所有內容。我想知道什麼方法最適合2D Java遊戲,定時器或線程?目前我在我的gameCanvas類中有一個Timer,它可以渲染/繪製所有內容並檢查碰撞。我還有一個用於我的球員的計時器,用於移動他。Java 2D遊戲 - 計時器與線程?

我用定時器的唯一原因是因爲我是新來的Java編程和它似乎是最簡單的方法當時在考慮所有我不得不把是這樣的:

Timer timer = new Timer(5,this); 
timer.start(); 

什麼將你們推薦嗎?

回答

2

這取決於遊戲的類型。對於「快速遊戲」(例如射手)而言,具有產量/等待(如果適當的話)的專用遊戲循環(可能在線程中)通常功能最佳。對於「慢遊戲」計時器會工作得很好 - 有但是,類型的定時器:

  1. 一個「鞦韆」計時器(javax.swing.Timer)
    1. 優勢:在美國東部時間運行,從而可以觸摸搖擺/ AWT對象
    2. 缺點:運行在EDT所以具有分辨率和定時保證
  2. 「服務」 計時器(java.util.Timer)
    1. 優點:
      1. 支持 「固定利率」 計時器
      2. 運行在自己的線程(因此分辨率/一致性較好,但不能保證)
    2. 缺點:不上EDT運行(所以不能碰Swing/AWT)。

許多情況下遊戲仍然必須計算時的最後一個事件發生之間的「三角」在當前事件發生在計算中使用。沒有使用增量的模型,遊戲速度會因系統而異。

就我個人而言,我會推薦LWJGL: Lightweight Java Game Library,它提供了一個非常適合「快速遊戲」循環的高分辨率時鐘。它還支持「直接」OpenGL綁定;-)

我沒有任何開發「慢遊戲」的經驗。

快樂編碼。

+0

謝謝,現在我的遊戲簡單和2D迷宮益智遊戲。你認爲最好的解決方案是什麼? –

+0

@pst +1沒有什麼複雜的,請(因此不能觸摸Swing/AWT)和所需的javax.swing.Action ... – mKorbel

4

pst說這兩種方法的優缺點是絕對正確的。

但是,我不會推薦。我會使用「專爲遊戲而設計」的遊戲引擎,例如Slick2D,它將極大地幫助您遊戲中的更新和邏輯,主遊戲循環的結構,以及照顧許多低級遊戲,您將遇到的級別問題。

如果您正在考慮使用Swing進行遊戲,那麼我也會遠離它,因爲列出的原因in my answer here

Slick2D來預處理,以處理時間問題,並找出渲染幀之間的變化等。你還得到很多很好的東西,你不必自己建立,如輸入處理(鍵盤,鼠標,控制器),加速圖形(您的遊戲將自動受益於圖形加速,因爲引擎會爲您提供幫助),並且當您準備好音頻時,它也有一個很棒的音頻庫。

自己寫這些東西會讓你想哭。除非你真的在構建引擎本身(而不是想花費你的時間來構建遊戲邏輯本身),否則當你只需要使用現成的成熟工具時,構建引擎就花費了很多時間。

+0

從頭開始寫它是funnnnnnnnnnnnnnn! fuunnn我說! ;-) +1 – 2011-10-17 03:11:06

+1

:)它絕對可以。我剛剛瞭解到,我更喜歡花時間在遊戲上,而不是工具。這絕對是個人喜好。有些人喜歡建築工具。只是不是我的事。 – jefflunt

+0

感謝您的回覆,我寧願自己寫一切,因爲它給了我一種成就感。我目前正在爲我的遊戲使用swing,你會推薦AWT嗎? –