1

私のコード:

私は現在ゲームを開発しており、コードのいくつかの異なる部分でいくつかのリソース(画像/サウンド/アニメーションなど)を使用しています。同じリソースを2回ロードしないようにするために、ResourceManagerを作成しました。これは、文字列を渡すと必要なリソースを返します。

次に例を示します。

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

このようにして、ファイルの名前や位置を知らなくても、リソースを使用したいときにリソースを参照できます。ここでの秘訣は、次のように画像を取得する前に、画像をロードする必要があることです。

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

これにより、指定されたファイルからImageObjectが作成され、指定されたキーを使用してHashMapに保存されます。

私の問題:

リソースファイルのいずれかを移動または名前変更することを決定するたびにソースコードを変更する必要があるため、これらのリソースへのパスをハードコーディングする必要はありません。

考えられる解決策(?):

ある種のconfigFileを読み取り、in-code-resource-namesをHashMapのresource-pathsにマップする別のHashMapを作成することを考えました。ファイルは次のようになります。

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

このようにして、「プリンセス」、「ヒーロー」、「ソード」などのリソース名を安全に使用でき、コーディング中にハードドライブ上のそれらの位置を気にする必要はありません。リソースファイルを移動または名前変更するときはいつでも、このconfigFileのパス/名前を更新するだけで、すべて問題ありません。

一方、すべてのin-code-resource-nameをパスにマップする1つの巨大なファイルがあるのはかなり醜いと思います。これにより、1つの巨大な文字列から文字列へのHashMapが発生する可能性があり、これもResourceManagerに保存する必要があります。物事はかなり混乱/不明確になる可能性があります。

誰かが私のためのより良い解決策を持っていますか?

私は本当にあなたの助けに感謝します、

ありがとう :)

4

1 に答える 1

3

説明したように構成ファイルまたはリソースファイルを使用することは、優れたアプローチです。ただし、HashMapにデータを入力する代わりに、ResourceBundleまたはを使用することを検討してPropertyResourceBundleください。それはそのようなものを保持/アクセスするように設計されています。http://docs.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html

于 2012-07-15T22:22:45.270 に答える