2014-02-08 79 views
0

我正在使用Swing開發Java 2D遊戲。我在一個不是EDT的線程中運行遊戲循環。大多數時候沒有問題。遊戲開發中的搖擺:遊戲循環

在我的遊戲中,Swing元素的唯一操控是每個遊戲循環週期repaint() a JPanel

所以我的問題是:我應該使用SwingUtilities.invokeLater()將整個遊戲循環放入EDT中嗎?或者我應該在不是EDT的線程中運行遊戲循環?

回答

0

您不應該讓遊戲邏輯在EDT上執行,因爲它很容易讓您的用戶界面無法響應。只要讓你的主循環運行在一個單獨的線程上並在那裏發佈輸入事件,並使用SwingUtilities從該線程觸發UI重繪。

0

通常情況下,你不應該在EDT上做任何與繪畫或GUI事件處理沒有直接關係的東西。當你在技術上可以這樣做,當然,當遊戲循環變得更復雜並且必須執行更多計算時,它可能會引起問題。

當你有一個專用的遊戲線程(執行遊戲循環)時出現的同步問題,而EDT來自通常遊戲線程將對遊戲對象執行修改的事實,這可能發生在 EDT正在繪製這些對象。有關更多信息,您必須發佈遊戲中當前出現的實體代碼,以及它們在遊戲循環中的修改方式以及它們在EDT中的塗裝方式。