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");
希望这能有所帮助。属性文件如何?属性文件如何?我来试试。我来试试。