Java 雙緩衝機制

2021-08-20 06:38:48 字數 1138 閱讀 5715

圖形的移動的時候不時會出現閃爍的現象,這是由於在同乙個繪圖表面上對圖形進行反覆繪製並擦除所導致的。

舉例來說,乙個繪製的小球,圖形的繪製總是在panle元件的graphics物件上進行的,在繪製一幅小球的圖形後馬上更新小球座標,接著呼叫repaint()方法擦除已有圖形並繪製一幅新的圖形。這一過程反覆地、快速地進行著,於是就容易產生圖形閃爍的現象。可以通過雙緩衝機制解決這一問題。

雙緩衝機制是借助兩個不同的緩衝區來進行圖形繪製,圖形不是直接在顯示裝置所對應的緩衝區進行繪製,而是首先在後備緩衝區進行繪製,然後將後備緩衝區中的內容整體複製到裝置緩衝區中,從而加快圖形繪製速度並增強圖形繪製的效果。

雙緩衝機制包含兩個過程,分別稱作離屏繪製(draw to off-screen)前屏顯示(paint to on-screen)。在離屏繪製階段可以使用影象image物件的緩衝去作為後備緩衝區(back buffer),在其中進行圖形繪製,而在前屏顯示階段便可以將後備緩衝區的資料直接複製到裝置緩衝區進行顯示,裝置緩衝區也叫前屏緩衝區或主介面(primary su***ce)。

離屏繪製步驟:

(1)建立乙個image物件

(2)獲取其graphics物件(緩衝區)

(3)設定繪製圖形

(4)在image上繪製圖形

//定義乙個gamerender()方法用來進行離屏繪製

public void gamerender()

以上程式採用影象緩衝區作為後備緩衝區,通過呼叫影象的getgraphics()方法來獲取影象緩衝區的控制權,繼而在其中繪製圖形。

前屏顯示步驟

(1)獲取當前螢幕的graphics物件

(2)複製image圖象緩衝區的內容

(3)釋放當前螢幕的graphics物件

//定義乙個gamepaint()方法用來進行前屏顯示

public void gamepaint()

以上程式通過呼叫當前元件的getgraphics()方法獲取對前屏緩衝區的控制權,接著呼叫drawimage()方法將影象緩衝區的內容複製到前屏緩衝區,該方法的第乙個引數表示源影象物件,第二個和第三個引數分別表示目標區域左上角的橫座標和縱座標。

雙緩衝機制

最早解釋多緩衝區如何工作的方式,是通過乙個現實生活中的例項來解釋的。在乙個陽光明媚的日子,你想將水池裡的水換掉,而又找不到水管的時候,你就只能用木桶來灌滿水池。當木桶被水龍頭注滿的,關掉水龍頭,走到水池旁邊,將水到進去,然後走回到水龍頭旁邊繼續重複上述工作,如此往復直到將水池灌滿。這就類似單緩衝工作...

Swing雙緩衝機制

public void paint graphics g 畫出草地 paintgrass gimage 畫出小河 paintriver gimage 畫出石頭 paintstone gimage 畫出各種道具 painttool gimage 將接下來的載入到窗體畫布上去,才能考到每次畫的效果 g....

java雙緩衝 筆記

雙緩衝解決畫面閃爍問題筆記 1 每次重新整理畫面時,執行過程是 自動呼叫repaint方法,repaint方法呼叫update方法,update方法呼叫paint方法實現重畫。這個過程中paint方法需要大 量計算,用時較長,故不流暢 2 解決方法是,將paint方法執行過程不顯示在螢幕上。具體是 ...