1

我的代码:

我目前正在开发一个游戏,并且在代码的几个不同部分中我正在使用一些资源(图像/声音/动画等)。为了避免两次加载相同的资源,我编写了一个 ResourceManager,如果我将字符串传递给它,它将返回所需的资源。

这是一个例子:

Image myImage = imageManager.getImage("princess");

这样,当我想使用它时,我可以在不知道文件名称或位置的情况下引用资源。这里的诀窍是我必须先加载图像,然后才能像这样获取它们:

imageManager.loadImage("res/princessImage.png", "princess");

这将从给定文件创建 ImageObject,并将其存储到具有给定键的 HashMap 中。

我的问题:

我真的不想硬编码这些资源的路径,因为每次我决定移动或重命名任何资源文件时都必须更改源代码。

一个可能的解决方案(?):

我考虑创建另一个 HashMap,它读取某种 configFile 并将 in-code-resource-names 映射到 HashMap 中的资源路径。该文件看起来有点像这样:

princess: res/princess.png
hero: res/hero.png
sword: res/items/sword.png

这样我就可以安全地使用诸如“公主”、“英雄”或“剑”之类的资源名称,并且在我编码时不用担心它们在硬盘上的位置。每当我移动或重命名资源文件时,我只需更新此配置文件中的路径/名称,一切都会好起来的。

另一方面,我认为拥有一个将每个 in-code-resource-name 映射到路径的巨型文件非常难看。这可能会导致一个巨大的 String to String HashMap,我也必须将其存储在 ResourceManager 中。事情可能会变得非常混乱/不清楚。

有人对我有更好的解决方案吗?

我真的很感谢你的帮助,

谢谢 :)

4

1 回答 1

3

如您所述,使用配置或资源文件是一种很好的方法。但是,不要填充 HashMap,而是考虑使用ResourceBundleor PropertyResourceBundle。它旨在保存/访问这些东西。http://docs.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html

于 2012-07-15T22:22:45.270 回答