2012-05-23 83 views
0

我有一個包含瓷磚和瓷磚包含障礙的板。障礙物可以是幾種類型之一(牆壁,激光,...)。刷新Swing GUI

遊戲的每一輪我執行董事會,它執行所有的障礙。一旦障礙物被執行並且某些東西已經改變,GUI就會被通知並且受影響的瓷磚被刷新。

在GUI中,tile是一個包含重疊圖像(JLabels)的OverLayLayout,因此所有重疊的圖像都可見。

現在的問題是當我執行它們時,它會變得很快,你什麼都不會發生。例如。你看不到激光束出現,玩家將會被損壞,但你沒有看到它發生...

所以我試着讓遊戲等待500ms,用戶可以看到GUI更新。我試過了(但可能做錯了):定時器,搖擺機,countdownlatch,但我似乎無法得到它的工作。 關於如何解決這個問題的任何想法?或者也許是等待的替代方案?

在此先感謝!

更新: 中板執行如下:

Iterator<Obstacle> it = obstacles.iterator(); 
while (it.hasNext()) 
    it.next().execute(this); 

CountDownLatch countDown = new CountDownLatch(1); 
setChanged(); 
notifyObservers(countDown); 
countDown.await(); 

的GUI板(這是通知)的更新功能如下:

final CountDownLatch countDown = (CountDownLatch) arg; 
SwingUtilities.invokeLater(new Runnable(){ 
    public void run() { 
     try { 
     updateUI(); 
     wait(500); 
     } catch (InterruptedException ex) { } 
      countDown.countDown(); 
    } 
}); 
+4

沒有一些代碼,它就像一個盲人管理員試圖走出一個賭場(FYI賭場建造像labyrints讓人們在裏面)。 –

+2

雖然我們在這裏,但我現在在Java項目中遇到了問題。我嘗試了很多東西,但它不起作用。任何想法如何解決它,OP? –

+0

Sry我忘了,補充說。 ;) –

回答

4

沒有看到你代碼,很難確定問題;我懷疑你阻止了事件派發線程。

此基於圖塊的game使用javax.swing.Timer的實例來動畫播放。按A啓用動畫,然後單擊空閒方塊以查看效果。你可能會將這種方法適應於你的遊戲。

+1

在面板重新繪製之後,看起來有一個小問題,那就是刷新了GUI ...現在擺動計時器就像一個魅力!謝謝! –