Java 绘制缓冲区图像与直接在屏幕上绘制形状
我正在创建一个游戏,包括在一个频率为50Hz的大型JPanel上绘制1000个填充圆,半径在2-10像素之间 我目前的做法是通过JPanel本身调用drawOval方法来绘制每个圆。然而,这是非常缓慢的,不知何故设法增加了50%的游戏运行时间 因此,我考虑使用缓冲图像:创建缓冲图像,并在缓冲图像上绘制填充圆。然后一次性将整个缓冲图像绘制到JPanel上。这种方法会比我原来的方法快吗?在这两种情况下,drawOval本身的使用速度是否都慢了1000倍左右Java 绘制缓冲区图像与直接在屏幕上绘制形状,java,graphics,bufferedimage,Java,Graphics,Bufferedimage,我正在创建一个游戏,包括在一个频率为50Hz的大型JPanel上绘制1000个填充圆,半径在2-10像素之间 我目前的做法是通过JPanel本身调用drawOval方法来绘制每个圆。然而,这是非常缓慢的,不知何故设法增加了50%的游戏运行时间 因此,我考虑使用缓冲图像:创建缓冲图像,并在缓冲图像上绘制填充圆。然后一次性将整个缓冲图像绘制到JPanel上。这种方法会比我原来的方法快吗?在这两种情况下,drawOval本身的使用速度是否都慢了1000倍左右 我怀疑,每当这些像素没有改变颜色时,再次打
我怀疑,每当这些像素没有改变颜色时,再次打印相同的像素会浪费大量的处理时间。有没有办法避免重新绘制这些冗余像素?如果创建DrawPanel,则不需要实例变量
DrawPanel
位于Javax.swing
包中
要创建一个椭圆形,请执行以下操作:
private class MyDrawPanel extends JPanel
{
public void paintComponent(Graphics g)
{
g.fillRect(0,0,this.getWidth(),this.getHeight());
g.setColor(Color.white);
g.fillOval(90,180,150,150)
}
}
这取决于很多事情。例如,圆圈有多大。我建议您尝试一下,自己执行相关的基准测试。任何答案基本上都是推测性的。圆圈的半径范围为2到10像素。Wing已经实现了双缓冲。您可以使用
setBufferStrategy
对其进行更改,并在方法中的任何其他操作之前调用super.paintComponent(g)
。