如何避免硬编码文件引用?

时间:2012-07-15 22:09:13

标签: java

我的代码:

我正在开发一款游戏,并且在代码的几个不同部分我正在使用一些资源(图像/声音/动画等)。为了避免两次加载相同的资源,我编写了一个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中。事情可能会变得相当混乱/不清楚。

有没有人为我提供更好的解决方案?

我非常感谢你的帮助,

谢谢:)

1 个答案:

答案 0 :(得分:3)

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