在JPanel的双缓冲的图像例如(Double buffered image example in

2019-10-18 12:16发布

我想知道,如果我实现了双缓冲图像..正确的,因为我注意到,我的颤抖的形象,我在屏幕上移动的边界...这是正常的?

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

Answer 1:

移动的创建bufferimage出的paintComponent()方法。 你不需要创建这个调用该方法每次。 你是无论如何绘制整个表面。

当你用做Graphics从中检索bufferImage (即dbg你的情况变量)你应该调用dispose()就可以了。

最后,你也许能逃脱没有第二图像,如果你确保你的组件和包含它的组件,具备的使用性能doubleBufferred设置为true



Answer 2:

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

在“如果游戏运行的”代码不中的paintComponent()方法属于。 这个想法是有改变你的游戏的状态,并不会在图像上的自定义绘制一个定时器或东西。 然后,当摆动调用的paintComponent()方法,你简单的油漆在当前状态下的图像。

看看在DrawOnImage从例如风俗画的途径 。 的代码通过使用鼠标增加矩形的图像。 那么,对于部分重新绘制图像画。

这些想法是创建/修改后的图像,然后重新绘制图像。 在游戏中它可能会变成你每次修改也画它的形象,但代码不应该是的paintComponent()方法的一部分。



文章来源: Double buffered image example in Jpanel