Java - 常量以及保存它们的位置

时间:2014-07-20 16:15:44

标签: java libgdx constants

好的,所以我一直在阅读使用常量和枚举的良好做法,但我仍然对我该怎么做感到困惑。

基本上我需要存储带有资源路径的字符串,比如

"/assets/sprites/ball.png"

然后我需要像#34; ball"我希望他们彼此相关。 这些字符串将在我的游戏代码中经常使用并存放在不同的文件/包中。

我有一个TextureAtlas类,给出了名称(" ball")已经为我提供了实际的资源(图形准备好绘制等)。但是当我需要加载资源时,我需要提供实际路径,而不仅仅是名称。我希望有一个地方,我将宣布所有的常量,如果" name"常数和"路径"常数以某种方式相关。因此,每当我想要使用该图形时,我都不必将实际路径放到文件中,而是希望使用名称为String的常量。

我希望你能理解我的意思。

好吧,我想我可以使用一个地图,其中key是名称(" ball"),value是路径(" /assets/ball.png")但是我仍然希望能够说,写这样的东西

Assets.GetSprite(Assets.BALL);

获得实际资源,甚至更好

Assets.GetSprite(BALL);

因此存在常量问题,我需要在一个地方为我的图形定义名称和相应路径,并且如果需要,可以在程序中的任何地方使用它。 这一切都需要在一个地方,这样每当我添加新的资源,比如新的声音或新的精灵到游戏时,我不必查看我的程序,找到应该手动输入的地方,我我希望拥有一个我将要检查的文件,只需为该1个文件添加新常量或类似内容。

干杯, 巴勃罗。

4 个答案:

答案 0 :(得分:2)

使用属性文件可能是个好主意。

Java Properties

<强> config.properties

ball = /assets/sprites/ball.png
user = /assets/sprites/user.png

要阅读这些值,请在游戏启动时执行以下操作

FileHandle propertiesFileHandle = Gdx.files
            .internal(PROPERTIES_FILE_PATH);
PROPERTIES = new Properties();
try {
    PROPERTIES.load(new BufferedInputStream(propertiesFileHandle.read()));
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

现在,您可以在任何需要的地方共享此PROPERTIES对象。

String ballPath = PROPERTIES.getProperty("ball");

希望这有帮助。

答案 1 :(得分:1)

Map有什么问题?创建一个static HashMap并存储您在那里的映射。您可以直接从那里获取您的价值。

OR

如果您只需要键入的值和值是常量的映射,那么您可以将它们放在interface中(默认情况下变量为public staticfinal)。

答案 2 :(得分:1)

我会选择这样的事情:

 public enum Assets {

     BALL, PLAYER // and so on

 }

 public class Configuration {

     Map<Assets, String> values= new HashMap<Assets, String>();

     public String getPathFor(Assets asset){

         if(!values.containsKey(asset)) throw new IllegalArgumentException();
         return values.get(asset);

     }

     /* Contains further logic to persist configuration */

 }

因此,您已经定义良好的AssetsConfiguration对象,您可以在其中存储更多信息。

答案 3 :(得分:1)

您可以使用参数创建更复杂的枚举。在这个示例http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html中查看Planet枚举,或者这是一个特定于您的项目的示例。请记住,创建构造函数是必需的,构造函数必须是私有的。

public class Asset {

    public enum AssetType {
        BALL("/assets/sprites/ball.png"),
        USER("/assets/sprites/user.png");

        private final String path;

        AssetsType(String path) {
            this.path = path;
        }

        public String getPath() {
            return this.path;
        }
    }

    private AssetType assetType;

    public Asset(AssetType assetType) {
        this.assetType = assetType;
    }

    // ...
}