作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的游戏的 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/
我是一个使用 Python 和 PyGTK 的 Linux 软件项目的开发人员。我们正在编写的程序依赖于许多第三方包,这些包可通过所有 mayor 发行版存储库获得。其中之一是 python 绑定(b
我是一名优秀的程序员,十分优秀!