Java 实现双缓冲?

Java 实现双缓冲?,java,graphics,buffer,Java,Graphics,Buffer,我正在做一个游戏,我正在试图找到最好的方法来实现双缓冲。有人能告诉我如何使用下面的渲染代码吗 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<

我正在做一个游戏,我正在试图找到最好的方法来实现双缓冲。有人能告诉我如何使用下面的渲染代码吗

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);
        }
public void绘制(图形g){
超级油漆(g);
Graphics2D g2d=(Graphics2D)g;
g2d.drawImage(p.getImage(),p.getX(),p.getY(),null);
//绘制每个球对象

对于(int i=0;i如果使用Swing,则可以使用内置双缓冲:

如果您正在实现自己的渲染,以下是一些提示:

双缓冲基本上意味着您有两个绘图缓冲区,在显示另一个缓冲区时交替写入

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


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

我想先给一个内置的方法,我把你给我的关于双缓冲的页面弄红了,但它没有告诉我从哪里开始使用JRootPane,你能给我一些帮助吗?@Duncan-从那个页面:
默认情况下,这个属性设置为true所有Swing组件。
因此您不需要做任何事情。
JRootPane
可以从
JFrame
等访问。