1

我会知道我的实现对于双缓冲图像是否正确..因为我注意到我在屏幕中移动的图像的边框会颤抖......这很正常吗?

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);
}
4

2 回答 2

3

将创建bufferimage移出paintComponent()方法。您不需要在每次调用该方法时都创建它。无论如何,您正在绘制整个表面。

当您完成Graphics检索自bufferImage(即dbg您的情况下的变量)时,您应该调用dispose()它。

最后,如果您确保您的组件和包含它的组件将属性doubleBufferred设置为true.

于 2013-08-19T12:17:01.577 回答
3

paintComponent() 方法应该做的就是绘制图像。

“如果游戏正在运行”代码不属于 paintComponent() 方法。这个想法是有一个计时器或其他东西来改变你的游戏状态并在你的图像上进行自定义绘图。然后,当 Swing 调用 paintComponent() 方法时,您只需将图像绘制为当前状态。

看一下自定义绘画方法DrawOnImage中的示例。该代码使用鼠标将矩形添加到图像中。然后,每当重新绘制组件时,都会绘制图像。

想法是创建/修改一次图像,然后重新绘制图像。在游戏中,每次修改图像时都会绘制它,但代码不应该是 paintComponent() 方法的一部分。

于 2013-08-19T14:21:17.373 回答