Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘制缓冲区图像与直接在屏幕上绘制形状_Java_Graphics_Bufferedimage - Fatal编程技术网

Java 绘制缓冲区图像与直接在屏幕上绘制形状

Java 绘制缓冲区图像与直接在屏幕上绘制形状,java,graphics,bufferedimage,Java,Graphics,Bufferedimage,我正在创建一个游戏,包括在一个频率为50Hz的大型JPanel上绘制1000个填充圆,半径在2-10像素之间 我目前的做法是通过JPanel本身调用drawOval方法来绘制每个圆。然而,这是非常缓慢的,不知何故设法增加了50%的游戏运行时间 因此,我考虑使用缓冲图像:创建缓冲图像,并在缓冲图像上绘制填充圆。然后一次性将整个缓冲图像绘制到JPanel上。这种方法会比我原来的方法快吗?在这两种情况下,drawOval本身的使用速度是否都慢了1000倍左右 我怀疑,每当这些像素没有改变颜色时,再次打

我正在创建一个游戏,包括在一个频率为50Hz的大型JPanel上绘制1000个填充圆,半径在2-10像素之间

我目前的做法是通过JPanel本身调用drawOval方法来绘制每个圆。然而,这是非常缓慢的,不知何故设法增加了50%的游戏运行时间

因此,我考虑使用缓冲图像:创建缓冲图像,并在缓冲图像上绘制填充圆。然后一次性将整个缓冲图像绘制到JPanel上。这种方法会比我原来的方法快吗?在这两种情况下,drawOval本身的使用速度是否都慢了1000倍左右


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

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

要创建一个椭圆形,请执行以下操作:

  • 创建绘图面板
  • 将DrawPanel添加到JFrame
  • 例如:

    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)