Java-常量及其存放位置

Java-常量及其存放位置,java,libgdx,constants,Java,Libgdx,Constants,好的,我一直在阅读使用常量和枚举的良好实践,但我仍然不知道应该怎么做 基本上,我需要存储带有指向资产路径的字符串,如 "/assets/sprites/ball.png" 然后我需要像“ball”这样的简单名称字符串,我希望它们相互关联。 这些字符串将在我的游戏代码中经常使用,并在不同的文件/包中使用 我有一个名为(“ball”)的TextureAtlas类,它已经为我提供了实际的资源(图形准备绘制等)。但是当我需要加载资源时,我需要给出实际的路径,而不仅仅是名称。我想要有一个地方,在那里我将

好的,我一直在阅读使用常量和枚举的良好实践,但我仍然不知道应该怎么做

基本上,我需要存储带有指向资产路径的字符串,如

"/assets/sprites/ball.png"
然后我需要像“ball”这样的简单名称字符串,我希望它们相互关联。 这些字符串将在我的游戏代码中经常使用,并在不同的文件/包中使用

我有一个名为(“ball”)的TextureAtlas类,它已经为我提供了实际的资源(图形准备绘制等)。但是当我需要加载资源时,我需要给出实际的路径,而不仅仅是名称。我想要有一个地方,在那里我将声明所有的常量,如果“name”常量和“path”常量都有某种关联,那就太好了。因此,每当我想使用该图形时,我不必输入文件的实际路径,相反,我想使用带有名称字符串的常量

我希望你能理解我的意思

嗯,我想我可以使用一个映射,其中key是名称(“ball”),value是path(“/assets/ball.png”),但我仍然希望能够这样写

Assets.GetSprite(Assets.BALL);
并获得实际的资源,甚至更好

Assets.GetSprite(BALL);
所以有一个常量的问题,我需要在一个地方为我的图形定义名称和相应的路径,如果我需要的话,可以在程序中的任何地方使用它。 这一切都需要在一个地方,以便每当我添加新的资源,如新的声音或新的精灵的游戏,我不必寻找我的整个程序,以找到地方,它应该手动键入,我想有1个文件,我会去,只是添加新的常数或类似的东西,为这1个文件

干杯,
Pablo.

地图有什么问题?创建一个
静态HashMap
并将映射存储在那里。您可以直接从那里获取您的值


如果只需要键和值为常量的映射,则可以将它们放在
界面中(默认情况下,变量为
公共
静态
最终
)。

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


如果只需要键和值为常量的映射,则可以将它们放入
界面中(默认情况下,变量为
公共
静态
最终
)。

我会选择这样的方式:

 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 */

 }
公共枚举资产{
球、球员//等等
}
公共类配置{
映射值=新的HashMap();
公共字符串getPathFor(资产){
如果(!values.containsKey(asset))抛出新的IllegalArgumentException();
返回值.get(资产);
}
/*包含保存配置的进一步逻辑*/
}

因此,您有了定义良好的
资产
配置
对象,您可以在其中存储更多信息

我喜欢这样的东西:

 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 */

 }
公共枚举资产{
球、球员//等等
}
公共类配置{
映射值=新的HashMap();
公共字符串getPathFor(资产){
如果(!values.containsKey(asset))抛出新的IllegalArgumentException();
返回值.get(资产);
}
/*包含保存配置的进一步逻辑*/
}

因此,您有了定义良好的
资产
配置
对象,您可以在其中存储更多信息

您可以使用参数创建更复杂的枚举。看看本例中的Planet enum,或者这里是一个特定于您的项目的示例。请记住,创建构造函数时需要使用,并且构造函数必须是私有的

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;
    }

    // ...
}

可以使用参数创建更复杂的枚举。看看本例中的Planet enum,或者这里是一个特定于您的项目的示例。请记住,创建构造函数时需要使用,并且构造函数必须是私有的

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;
    }

    // ...
}

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

配置属性

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();
}

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

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

希望这有帮助。

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

配置属性

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();
}

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

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

希望这能有所帮助。

属性文件如何?属性文件如何?我来试试。我来试试。