绘制BufferedImage vs直接在屏幕上绘制形状

时间:2015-05-08 12:36:39

标签: java graphics bufferedimage

我正在创建一个游戏,其中包括将1000个实心圆圈(半径在2到10个像素之间)绘制到一个频率为50Hz的大型JPanel上。

我目前如何做到这一点是通过JPanel本身调用drawOval方法绘制每个圆圈。然而,这非常缓慢,并以某种方式设法将游戏运行时间增加了50%。

所以我想到了使用BufferedImage:创建缓冲图像并在缓冲图像上绘制实心圆圈。然后一次性将整个缓冲的图像绘制到JPanel上。这种方法会比我原来的方法更快吗?在这两种情况下,drawOval本身的使用速度是否会慢1000左右?

我怀疑每当这些像素没有改变颜色时再次打印相同的像素会浪费很多处理。有没有办法避免重新绘制这种冗余像素?

1 个答案:

答案 0 :(得分:0)

如果您创建DrawPanel,则不需要实例变量。 DrawPanel位于Javax.swing包中。

创建椭圆

  1. 创建DrawPanel
  2. 将DrawPanel添加到JFrame
  3. 示例:

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