Java 使用paintcomponent方法绘制大量图像非常耗时 for(int i=0;i只是画出它。 < P>你可以通过预先加载你的图像,通过一个巨大的因素来加速你的PrtTeCm方法。
我正在尝试使用paintComponent()方法绘制80幅图像。我还有另一个对象,当我按下向右箭头键时,它会一直向右移动,当按下向左箭头键时,它会一直向左移动,依此类推(使用keypressed事件)。但每次调用“paint component”时,其他可移动对象的移动都会变得非常缓慢。我怎样才能跑得平稳呢。我怎样才能阻止砖块每次被粉刷呢?假设您的代码摘录来自您的Java 使用paintcomponent方法绘制大量图像非常耗时 for(int i=0;i只是画出它。 < P>你可以通过预先加载你的图像,通过一个巨大的因素来加速你的PrtTeCm方法。,java,paintcomponent,Java,Paintcomponent,我正在尝试使用paintComponent()方法绘制80幅图像。我还有另一个对象,当我按下向右箭头键时,它会一直向右移动,当按下向左箭头键时,它会一直向左移动,依此类推(使用keypressed事件)。但每次调用“paint component”时,其他可移动对象的移动都会变得非常缓慢。我怎样才能跑得平稳呢。我怎样才能阻止砖块每次被粉刷呢?假设您的代码摘录来自您的paintComponent()方法,您在那里做的工作远远超出了您应该做的。每次更新时,您的paintComponent()必须从磁
paintComponent()
方法,您在那里做的工作远远超出了您应该做的。每次更新时,您的paintComponent()
必须从磁盘读取每个文件(I/O非常昂贵),并从其内容(不一定便宜)构造buffereImage
。然后它会丢弃图像,图像大小可能至少有几十kB,这最终会给GC带来压力
除非您有理由期望图像文件在程序运行时会被修改(甚至可能会被修改),否则您可以通过每次读取所有文件一次,并保留
BufferedImage
对象供paintComponent()
重复使用来显著提高性能。如果图像的相对位置没有改变,那么你甚至可以考虑从它们的内容构造一个大的图像,并且让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));
}
}