天天看點

解決java中GUI的閃爍問題

今天在做坦克大戰這個小遊戲的時候發現額這個問題,我想添加一張背景圖檔到java視窗中去,然後用線程器懂paint方法的時候發現螢幕一直在頻閃,如圖所示

查閱資料,

得出問題原因:

重新整理的頻率太快,paint方法還沒有完成,下一個方法又來了...

解決方法:

首先我們要了解paint()是由update()調用出來的,而update()是由repaint()調用出來的

在awt中對于窗體畫布的重繪其條用順序是repaint() —>update()—>paint()

是以隻要我們修改update代碼就可以了,。在 updateupdate updateupdate方法 裡,先 new new出來 一張虛拟的圖檔, 得 到這個圖檔的畫筆, Graphics gOffScreen = offScreenImage.getGraphics();,儲存 畫筆的顔色, 設定 這支畫筆的顔色與遊戲背景相同, 使用這支畫筆 畫一個 與遊戲視窗大小相 同的虛拟圖檔, 同的虛拟圖檔, 同的虛拟圖檔, 同的虛拟圖檔, 同的虛拟圖檔, 同的虛拟圖檔, 同的虛拟圖檔, 再 還原來的顔色 還原來的顔色 還原來的顔色 還原來的顔色 還原來的顔色 還原來的顔色 還原來的顔色 。 将 這 支畫筆傳給 支畫筆傳給 支畫筆傳給 支畫筆傳給 支畫筆傳給 paint paintpaint方法 print(gOffScreen);,這樣 paint paint方法 畫出來的就在這張虛拟圖檔上 。最後 使用 遊戲視窗的這支畫筆 g将這張虛拟圖檔 畫到遊戲視窗中,代碼如下:

public void update(Graphics g) {

if(offScreenImage == null) {

offScreenImage = this.createImage(800, 600);

}

//拿到這個圖檔的畫筆

Graphics gOffScreen = offScreenImage.getGraphics();

Color c = gOffScreen.getColor();

gOffScreen.setColor(Color.GREEN);

gOffScreen.fillRect(0, 0, 800, 600);

gOffScreen.setColor(c);

print(gOffScreen);

g.drawImage(offScreenImage, 0, 0, null);

}

但是這樣就不能自己添加背景圖檔了,隻能用純色...但是解決了頻閃的問題。