Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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 使用paintcomponent方法绘制大量图像非常耗时 for(int i=0;i只是画出它。 < P>你可以通过预先加载你的图像,通过一个巨大的因素来加速你的PrtTeCm方法。_Java_Paintcomponent - Fatal编程技术网

Java 使用paintcomponent方法绘制大量图像非常耗时 for(int i=0;i只是画出它。 < P>你可以通过预先加载你的图像,通过一个巨大的因素来加速你的PrtTeCm方法。

Java 使用paintcomponent方法绘制大量图像非常耗时 for(int i=0;i只是画出它。 < P>你可以通过预先加载你的图像,通过一个巨大的因素来加速你的PrtTeCm方法。,java,paintcomponent,Java,Paintcomponent,我正在尝试使用paintComponent()方法绘制80幅图像。我还有另一个对象,当我按下向右箭头键时,它会一直向右移动,当按下向左箭头键时,它会一直向左移动,依此类推(使用keypressed事件)。但每次调用“paint component”时,其他可移动对象的移动都会变得非常缓慢。我怎样才能跑得平稳呢。我怎样才能阻止砖块每次被粉刷呢?假设您的代码摘录来自您的paintComponent()方法,您在那里做的工作远远超出了您应该做的。每次更新时,您的paintComponent()必须从磁

我正在尝试使用paintComponent()方法绘制80幅图像。我还有另一个对象,当我按下向右箭头键时,它会一直向右移动,当按下向左箭头键时,它会一直向左移动,依此类推(使用keypressed事件)。但每次调用“paint component”时,其他可移动对象的移动都会变得非常缓慢。我怎样才能跑得平稳呢。我怎样才能阻止砖块每次被粉刷呢?

假设您的代码摘录来自您的
paintComponent()
方法,您在那里做的工作远远超出了您应该做的。每次更新时,您的
paintComponent()
必须从磁盘读取每个文件(I/O非常昂贵),并从其内容(不一定便宜)构造
buffereImage
。然后它会丢弃图像,图像大小可能至少有几十kB,这最终会给GC带来压力


除非您有理由期望图像文件在程序运行时会被修改(甚至可能会被修改),否则您可以通过每次读取所有文件一次,并保留
BufferedImage
对象供
paintComponent()
重复使用来显著提高性能。如果图像的相对位置没有改变,那么你甚至可以考虑从它们的内容构造一个大的图像,并且让 PruttCuffice()/Cuth>只是画出它。

< P>你可以通过预先加载你的图像

,通过一个巨大的因素来加速你的PrtTeCm方法。 创建一个类似BricksListImgs的列表,在构造函数中

for (int i = 0; i < bricksList.size(); i++) {
 BufferedImage image;
 try {

            image = ImageIO.read(new File(bricksList.get(i).img));

            g.drawImage(image, bricksList.get(i).x, bricksList.get(i).y, null); 
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
Image BricksListImgs[];
MyConstructor(){
BricksListImgs=新的BricksListImgs[bricksList.size()];
对于(int i=0;i

然后使用paintComponent方法从BriksListImgs中绘制图像

为什么每次绘制时都要读取图像文件?只需读取一次并将其存储为变量,然后绘制它。文件IO通常是游戏中的一大瓶颈。很多人都想知道这一点。真的很感激!请记住,paintComponent通常每秒调用几次。这就是为什么像读取文件这样昂贵的操作永远不应该在其中发生。
Image BricksListImgs[];

MyConstructor () {
  BricksListImgs = new BricksListImgs[bricksList.size()];
  for (int i = 0; i < bricksList.size(); i++) {
    BricksListImgs[i] = ImageIO.read(new File(bricksList.get(i).img));
  }
}