实施Doublebuffering?

时间:2011-10-07 06:42:20

标签: java graphics buffer

我正在制作一款游戏,而我正试图找到实现Doublebuffering的最佳方法。有人能告诉我如何使用下面的渲染代码来完成它吗?

public void paint(Graphics g){
    super.paint(g);


    Graphics2D g2d = (Graphics2D) g;


    g2d.drawImage(p.getImage(), p.getX(),p.getY(),null);

    //draw each ball object
        for(int i=0;i<balls.size(); i++){
             Ball tmp = (Ball) balls.get(i);
             g2d.drawImage(tmp.getImage(), tmp.getX(),tmp.getY(),null);
            }   
         //strings
         g2d.drawString("Score: "+score,50,20);
        }

有人可以帮忙,我会非常感激。

先谢谢。

1 个答案:

答案 0 :(得分:2)

如果你正在使用Swing,你可以使用内置双缓冲:http://java.sun.com/products/jfc/tsc/articles/painting/#db

如果你正在实现自己的渲染,这里有一些提示:

双缓冲基本上意味着您有两个绘制缓冲区,您可以交替写入,而另一个显示。

在您的情况下,您可以使用图像绘制游戏内容,然后将该图像绘制到组件。这在某种意义上应该给你双重缓冲。您可以使用两个交换的图像以减少并发访问,即一个是显示的“前”缓冲区,另一个是您绘制的“后退”缓冲区。

那就是说,我强烈建议你不要自己实施。相反,您应该尝试使用现有的2D库(如Swing)或3D库(如OpenGL和JOGL或LWJGL作为Java绑定 - 请注意,它不必是OpenGL的3D)。或者你也可以寻找一个游戏引擎,那里有很多它们。

相关问题