gpt4 book ai didi

java - 图像大小造成计时器问题

转载 作者:行者123 更新时间:2023-12-02 12:00:54 25 4
gpt4 key购买 nike

我的游戏的 Swing.Timer 的工作原理取决于我为背景导入的图像的大小。当我导入尺寸为 1920 x 1080 的图像时,计时器非常慢并且几乎不更新,但它的质量非常完美。当图像尺寸设置为 50 x 50 时,计时器工作正常,但图像本身会严重扭曲。 java 有没有办法解决这个问题?代码如下所示:

加载图像类:

    public class BufferedImageLoader {
Image image;
public Image loadImage(String path) {
try {
image = ImageIO.read(this.getClass().getResource(path));
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
}

获取加载的图像

    public class ImageLoader {
BufferedImageLoader bif = new BufferedImageLoader();
public Image spaceship() {
return bif.loadImage("/objects/spaceship.png");
}

public Image background() {
return bif.loadImage("/objects/spaceBackground.png");
}
public Image asteroid1() {
return bif.loadImage("/objects/v.png");
}
public Image background2() {
return bif.loadImage("/Other/background.png");
}
}

我遇到问题的代码:

    public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if(menu)
ms.render(g2);
if(game) {
g2.drawImage(il.background2(), 0, 0, 1000, 750, this);
g2.drawImage(il.spaceship(), dx, 600, 100, 100, this);
}
if(settings)
ss.render(g2);
if(credits)
cs.render(g2);

}

il 是 ImageLoader 对象我发现问题发生时,我只是不太明白为什么会发生......

编辑:对于任何想知道的人,当我将背景尺寸设置为 1000、750(我绘制的尺寸)时,计时器与 1920 x 1080 图像相同,非常慢且笨重。

最佳答案

加载图像非常耗时。例如,您最好预先加载和缓存图像并简单地重新使用它们。

public enum BufferedImageLoader {
INSTANCE;
private Map<String, BufferedImage> cache = new HashMap<>();
public Image loadImage(String path) {
BufferedImage image = cache.get(path);
if (image == null) {
try {
image = ImageIO.read(this.getClass().getResource(path));
cache.put(path, image);
} catch (IOException e) {
e.printStackTrace();
}
}
return image;
}
}

那么你可以这样做...

public class ImageLoader {
public Image spaceship() {
return BufferedImageLoader.INSTANCE.loadImage("/objects/spaceship.png");
}

作为一般经验法则,不要在绘制方法中执行任何可能需要时间才能执行的操作,绘制应该尽可能快地运行

关于java - 图像大小造成计时器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47257532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com