我正在用Java2D编写一个游戏,它在我的电脑和我测试过的另一台电脑上运行得很流畅。然而,在另一台计算机上,它的规格和java设置都很不错,速度非常慢。我很确定我把它缩小到了g.drawImage()命令。在做了一些研究之后,我发现有人制作了一种方法,将一些他认为可以提高速度的东西汇编起来,该方法是:
public BufferedImage toCompatibleImage(BufferedImage image) {
// obtain the current system graphical settings
GraphicsConfiguration gfx_config = GraphicsEnvironment
.getLocalGraphicsEnvironment().getDefaultScreenDevice()
.getDefaultConfiguration();
//if image is already compatible and optimized for current system
//settings, simply return it
if (image.getColorModel().equals(gfx_config.getColorModel())) {
return image;
}
// image is not optimized, so create a new image that is
BufferedImage new_image = gfx_config.createCompatibleImage(
image.getWidth(), image.getHeight(), Transparency.TRANSLUCENT);
// get the graphics context of the new image to draw the old image on
Graphics2D g2d = (Graphics2D) new_image.getGraphics();
// actually draw the image and dispose of context no longer needed
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
// return the new optimized image
// System.out.println(image.getColorModel());
return new_image;
}
我很困惑你怎么用这个方法。我做到了:
1) 仅在使用image.IO从png创建图像时调用它。
BufferedImage img = toCompatibleImage(theLoadedImage);
然后在paintComponent(Graphics g)方法中调用
Graphics2D g2 = (Graphics2D) g;
g.drawImage(img, x, y, null);
2) 在每次重新绘制时调用它,如下所示:
Graphics2D g2 = (Graphics2D) g;
g.drawImage(toCompatibleImage(theLoadedImage), x, y, null);
这两种方法除了FPS的名义变化外,似乎没有什么作用,第一种方法稍快一些。我不知道我是否正确使用了这一点,所以帮助和基本解释将非常有用。