对不起,如果我听起来没有经验或没有任何意义,我目前正处于我的第二个计算机科学年,而我目前正在用Java制作一个轻型2D游戏引擎用于学校项目(我们可以选择我们想要做的事情这个)。
所以我现在正在研究资产经理。现在它包含一个带有assets和一个InputStreamProvider的hashmap。
InputStreamProvider是assetManager和不同类型的提供者之间的接口。目前,我只有一个FileProvider,它提供来自文件的流。
现在一切正常,但是当从ID中实际检索文件时,我的扩展程序出现了一个小问题。我认为使用资产管理器的一个优点是你可以只为你的资产使用ID,一旦加载就可以了,但是当你需要加载它们时,你怎么知道文件扩展?
这是我的解决方法,使用配置文件显然不是一个好的解决方案,该配置文件列出了用于资产的扩展,然后尝试在每次扩展时加载文件。
public class FileProvider extends AssetInputStreamProvider {
private final static String assetLocation = "assets/";
protected final static List<String> assetExtentions = new ArrayList<>();
static {
try {
InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("conf/assets.cfg")));
while (isr.ready()) {
String ext = new String();
Character c = (char) isr.read();
while (!c.equals(',')) {
ext += c;
c = (char) isr.read();
}
assetExtentions.add(ext);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(AssetInputStreamProvider.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(AssetInputStreamProvider.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public InputStream getInputStream(String type, String name) {
File file;
for (String assetExtention : assetExtentions) {
try {
System.out.println(assetLocation + type + "/" + name + "." + assetExtention);
file = new File(assetLocation + type + "/" + name + "." + assetExtention);
return new FileInputStream(file);
} catch (FileNotFoundException ex) {
Logger.getLogger(FileProvider.class.getName()).log(Level.SEVERE, null, ex);
}
}
return null;
}
}
所以我想知道是否有办法加载文件而不知道它的扩展,或者我是否完全弄错了加载资产的方法,然后如果有人能告诉我正确的方法这会非常有帮助。
出于好奇,这超出了我的问题的范围,但我看到有些人使用整数作为ID,但无论我多么想到它,我无法想象如何在没有硬编码资源的情况下做到这一点给他们一个int值所以我想得到一些提示知道如何实现这样一个系统。
非常感谢阅读并度过了美好的一天。