gpt4 book ai didi

Java 将图像加载到类 - 最有效的做法?

转载 作者:行者123 更新时间:2023-12-01 09:25:39 25 4
gpt4 key购买 nike

我正在用 Java 编写一个基于图 block 的 2D 游戏。角色将根据游戏逻辑放置在图 block 上。每个角色都与一张图片相关联,该图片将使用 java.awt.Graphics2D 绘制到屏幕上。然而, map 上的每个角色可能有多个实例。

存储和访问角色图像的建议做法是什么?

我能想到三种可能的实现:

  1. 为每个角色分配一个 java.awt.image.BufferedImage 类型的私有(private)变量。每次需要绘制对象时,都会使用 getter 来访问图像。但是,这会导致对象的尺寸过大吗?
  2. 有另一个实用程序类将所有图像存储在静态变量中。每次需要绘制角色时,都可以通过将 id/name 传递给实用程序类中的静态 getter 方法来调用图像。这会比以前的方法更有效还是更慢?
  3. 每次需要绘制角色时只需加载图片即可。每次需要绘制角色时,这都会引发 ImageIO.read(new File(character.getImagePath())。这可能是最快的吗?

最佳答案

我读过很多关于如何优化游戏的文章,我发现在开始时加载所需的资源并存储它们以供以后使用非常重要。一些最长的操作出现在文件 I/O 代码中。甚至有可能出现一些异常。例如,在第三个选项中,如果 ImageIO 抛出 IOException 会发生什么?你不会有图像,并且必须渲染一些其他东西。如果图像读取时间比预期长,它同样会削弱用户的游戏体验。

这是一个用于预加载资源(在您的 .jar 中)的示例代码片段:

// Imports and other stuff...

// Parameter flocation: resource location
private BufferedImage preloadImage(String flocation){
BufferedImage bufimg = null;
System.out.println("Attempting to load image: '" + flocation + "'");

try {
bufimg = ImageIO.read(this.getClass().getResourceAsStream(flocation));
} catch(IOException e){
System.err.println(
"An error occurred while attempting to load '" + flocation + "'");

return null;
}

// Now store this somewhere safe!
return bufimg;
}

对于您的第一个和第二个选项,如果您仔细考虑一下,实际上并没有太大区别。第一个只是为每个角色添加一个字段,而另一个则为您管理所有角色图像。就我个人而言,我更喜欢第一个选项,因为它减少了代码困惑,提高了可读性。当然,您可能决定根据主题对代码进行分组,因此第二个选项完全没问题。

关于Java 将图像加载到类 - 最有效的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39860645/

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