簡體   English   中英

Jpanel中的雙緩沖圖像示例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM