我對遊戲開發比較陌生。我一直在開發遊戲並學習2-3個月的遊戲開發。我使用Java。Java:使用Swing編程遊戲
我一直使用Swing作爲我的圖形(也就是說,整個遊戲顯示在JPanel
上,使用Graphics2D
對象)。到目前爲止,我沒有遇到任何麻煩。
最近,我在最近的項目中遇到了一個問題。某些方法在一致的時間間隔內調用有問題(有時它每15-16毫秒運行一次,因爲它應該,有時它會開始每3000(!)毫秒運行一次)。
我做了一些令人沮喪的調試和一些研究,並發現這種情況發生的原因可能是因爲我沒有處理Swing和線程的權利。
我的entrie遊戲循環在線程的run()
方法內運行(它不是EDT)。所以我一直在修改EDT之外的Swing元素。顯然這必然會造成問題。
當我發現這是問題是,我想:
「嘿,我只是爲了運行EDT內gameloop使用SwingUtilities.invokeLater()
!」
但後來我想起,只是因爲它的「禁止」,以操縱搖擺元素的EDT之外,這也是有問題的操作裏面從非Swing對象EDT(我認爲...這是否正確?)。
如果是這樣,那麼我不知道如何使用Swing 開發Java遊戲而不會遇到奇怪的問題。
我的問題是:
我如何開發遊戲安全,使用搖擺?爲避免涉及Swing和線程的問題,我會嚴格執行哪些準則?每個使用Swing的遊戲開發者的任何說明都應該知道?
這對我來說很重要,因爲我真的想用Java進行遊戲開發,但如果我不明白這一點,我總是會遇到奇怪的問題,不會能夠進步。
謝謝您的幫助
根據我的經驗,使用單一的非EDT線程工作。 – Darkhogg
@Darkhogg怎麼回事?我雖然從EDT外部操縱一個JPanel應該會導致問題。 –
Swing是一個帶有按鈕和複選框等的小部件庫...它真的適用於數據+生產力應用程序。對於遊戲,你只需要一個OpenGL緩衝區的像素緩衝區來繪製。你有沒有考慮過lwjgl或jogl?即使是2D遊戲? – user2684301