2010-01-20 64 views
0

我正在做一個java遊戲。在一些常規毫秒後,我正在重新繪製屏幕。 但是,如果計時器的持續時間變得非常少,那麼在這種情況下屏幕開始閃爍。爲了避免計時器上的scren閃爍java

有什麼辦法可以避免它?

我們可以使用多線程來避免這種情況嗎?

回答

1

你可以使用雙緩衝。

這裏是一個「雙緩衝與Java」教程:Double Buffering and Page Flipping

多線程不能單獨解決這個問題......

當你重繪
+0

我剛剛聽說過它..它避免了閃爍。但我不知道如何實現它。你能建議我如何在java中實現它? – 2010-01-20 12:35:03

+0

使用我貼的鏈接:-) – 2010-01-20 12:36:02

1

,你會被清除之前重繪整個畫布出現的閃爍。如果您可以通過將相同的形狀與背景顏色疊加來僅清除畫布上以前繪製的部分,則可以避免閃爍。這只是一個可能的解決方案。

2

檢查出this tutorial,它解釋瞭如何使用加速圖形模式和雙緩衝來避免屏幕閃爍。關鍵概念是建立一個BufferStrategy管理雙緩衝:

// create the buffering strategy which will allow AWT 
// to manage our accelerated graphics 
createBufferStrategy(2); 
strategy = getBufferStrategy(); 

然後,使您獲得圖形從緩衝策略對象中,使用Graphics進行繪製,然後調用strategy.show()

// Get hold of a graphics context for the accelerated 
// surface and blank it out 
Graphics2D g = (Graphics2D) strategy.getDrawGraphics(); 
g.setColor(Color.black); 
g.fillRect(0,0,800,600); 

g.dispose(); 
strategy.show(); 
1

其可被用來減少在動畫畫面閃爍的技術是使用double buffering。通過具有執行繪圖操作的離屏目的地,並且只有當離屏繪圖準備好顯示時纔會將其繪製到物理屏幕,從而實現雙緩衝。

多線程不是解決方案,因爲GUI由AWT和Swing中的單個線程管理。

-1

確保您使用的是EDTjavax.swing.Timer的一個實例使得這很容易,因爲動作事件處理程序在EDT上執行。即使在高幀速下,我也看不到默認緩衝策略的閃爍,如here所示。