[英]Double buffered image example in Jpanel
我會知道我的實現對於雙緩沖圖像是否正確..因為我注意到在屏幕上移動的圖像的邊界發抖……這是正常的嗎?
public void paintComponent(Graphics g) {
Image bufferimage= createImage(180,180);
Graphics dbg= bufferimage.getGraphics();
//clean the screen
dbg.setColor(new Color(100,100,100));
dbg.fillRect(0,0,getWidth(),getHeight());
if (game_is_running) {
// draw various type of object with drawImage
for(int i=0; list[i]!=null; i++) {
list[i].draw(dbg);
}
target.draw(dbg);
I.draw(dbg);
}
//finally draw the image linked to graphics
g.drawImage(bufferimage,0,0,this);
}
將bufferimage
的創建移出paintComponent()
方法。 您無需在每次調用該方法時都創建它。 無論如何,您都在繪制整個表面。
當您完成從bufferImage
檢索到的Graphics
(即您的情況下的dbg
變量)時,應該在其上調用dispose()
。
最后,如果確保您的組件和包含該組件的組件的屬性doubleBufferred
設置為true
,那么您也許可以擺脫第二張圖片。
paintComponent()方法應該做的就是繪制圖像。
“如果游戲正在運行”代碼不屬於paintComponent()方法。 這個想法是要有一個Timer或可以改變游戲狀態並在圖像上進行自定義繪制的東西。 然后,當Swing調用paintComponent()方法時,您可以簡單地以當前狀態繪制圖像。
看一下“自定義繪畫方法”中的DrawOnImage
示例。 該代碼使用鼠標將矩形添加到圖像。 然后,無論何時重新繪制組件,都將繪制圖像。
想法是創建/修改圖像一次,然后重新繪制圖像。 在游戲中,可能會發現每次修改圖像時也會對其進行繪制,但是代碼不應成為paintComponent()方法的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.