好的,所以我一直在阅读使用常量和枚举的良好做法,但我仍然对我该怎么做感到困惑。
基本上我需要存储带有资源路径的字符串,比如
"/assets/sprites/ball.png"
然后我需要像#34; ball"我希望他们彼此相关。 这些字符串将在我的游戏代码中经常使用并存放在不同的文件/包中。
我有一个TextureAtlas类,给出了名称(" ball")已经为我提供了实际的资源(图形准备好绘制等)。但是当我需要加载资源时,我需要提供实际路径,而不仅仅是名称。我希望有一个地方,我将宣布所有的常量,如果" name"常数和"路径"常数以某种方式相关。因此,每当我想要使用该图形时,我都不必将实际路径放到文件中,而是希望使用名称为String的常量。
我希望你能理解我的意思。
好吧,我想我可以使用一个地图,其中key是名称(" ball"),value是路径(" /assets/ball.png")但是我仍然希望能够说,写这样的东西
Assets.GetSprite(Assets.BALL);
获得实际资源,甚至更好
Assets.GetSprite(BALL);
因此存在常量问题,我需要在一个地方为我的图形定义名称和相应路径,并且如果需要,可以在程序中的任何地方使用它。 这一切都需要在一个地方,这样每当我添加新的资源,比如新的声音或新的精灵到游戏时,我不必查看我的程序,找到应该手动输入的地方,我我希望拥有一个我将要检查的文件,只需为该1个文件添加新常量或类似内容。
干杯, 巴勃罗。
答案 0 :(得分:2)
使用属性文件可能是个好主意。
<强> 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
static
和final
)。
答案 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 */
}
因此,您已经定义良好的Assets
和Configuration
对象,您可以在其中存储更多信息。
答案 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;
}
// ...
}