通过libgdx中的资产管理器加载一个简单的文本文件

internal加载一个简单的文本文件很容易:

 Gdx.files.internal("data/colors.txt"); 

但是我现在使用AssetManager来加载AssetDescriptor<?>数组中定义的资产,同时显示加载屏幕(带有进度指示器)。 所以我想在我的描述符数组中使用这样的东西:

 ... new AssetDescriptor<_type_>(Gdx.files.internal("data/colors.txt"), _type_.class), ... 

我想通过资产管理器加载文件,所以整体进度可以显示为data/colors.txt文件可以变得非常大,因此需要更长的时间来加载(我使用一个工具来自动生成一个很长的列表的颜色定义: RRR,GGG,BBB,AAA ,每个在0-255的范围内)。

有没有这样做的好方法?

我search了wiki的答案,发现没有文本文件的Loader ( 见这里的列表 )。

所以我按照同一页上的说明写我自己的加载程序( 可以在这里find说明 )。 这就是我想到的:


Text类基本上是一个简单String的包装:

 package mygame.assets; import com.badlogic.gdx.files.FileHandle; public class Text { private String string; public Text() { this.string = new String("".getBytes()); } public Text(byte[] data) { this.string = new String(data); } public Text(String string) { this.string = new String(string.getBytes()); } public Text(FileHandle file) { this.string = new String(file.readBytes()); } public Text(Text text) { this.string = new String(text.getString().getBytes()); } public void setString(String string) { this.string = string; } public String getString() { return this.string; } public void clear() { this.string = new String("".getBytes()); } } 

TextLoader类是Texttypes的资源的相应的加载器类:

 package mygame.assets.loaders; import com.badlogic.gdx.assets.AssetDescriptor; import com.badlogic.gdx.assets.AssetLoaderParameters; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader; import com.badlogic.gdx.assets.loaders.FileHandleResolver; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; import mygame.assets.Text; public class TextLoader extends AsynchronousAssetLoader<Text, TextLoader.TextParameter> { public TextLoader(FileHandleResolver resolver) { super(resolver); } Text text; @Override public void loadAsync(AssetManager manager, String fileName, FileHandle file, TextParameter parameter) { this.text = null; this.text = new Text(file); } @Override public Text loadSync(AssetManager manager, String fileName, FileHandle file, TextParameter parameter) { Text text = this.text; this.text = null; return text; } @SuppressWarnings("rawtypes") @Override public Array<AssetDescriptor> getDependencies(String fileName, FileHandle file, TextParameter parameter) { return null; } public static class TextParameter extends AssetLoaderParameters<Text> { } } 

然后,在主类的create()方法中注册Text资源及其TextLoader

 @Override public void create() { // ... // Assuming that the main class contains the global AssetManager assetManager.setLoader( Text.class, new TextLoader( new InternalFileHandleResolver() ) ); // ... } 

要使用它:

 assetLoader.load( new AssetDescriptor< Text >( "data/colors.txt", Text.class, new TextLoader.TextParameter() ); String string = assetLoader.get( "data/colors.txt", Text.class ).getString(); // Process the string 

当你自动生成这些颜色定义,也许你可以生成它,而不是从文件加载。 如果加载的问题是文件的大小,可以考虑使用压缩。 但是,正如你想使用资产加载器,我会添加一些可能有用的链接。

要管理这些颜色定义资源,您可以编写自己的加载程序 。

你也可以考虑一个自定义的JSON序列化 。