我正在制作一款游戏,而我正试图找到实现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);
}
有人可以帮忙,我会非常感激。
先谢谢。
答案 0 :(得分:2)
如果你正在使用Swing,你可以使用内置双缓冲:http://java.sun.com/products/jfc/tsc/articles/painting/#db
如果你正在实现自己的渲染,这里有一些提示:
双缓冲基本上意味着您有两个绘制缓冲区,您可以交替写入,而另一个显示。
在您的情况下,您可以使用图像绘制游戏内容,然后将该图像绘制到组件。这在某种意义上应该给你双重缓冲。您可以使用两个交换的图像以减少并发访问,即一个是显示的“前”缓冲区,另一个是您绘制的“后退”缓冲区。
那就是说,我强烈建议你不要自己实施。相反,您应该尝试使用现有的2D库(如Swing)或3D库(如OpenGL和JOGL或LWJGL作为Java绑定 - 请注意,它不必是OpenGL的3D)。或者你也可以寻找一个游戏引擎,那里有很多它们。