我可以使用以下代码加载位图字体:
BitmapFont font= new BitmapFont(
Gdx.files.internal( "Fonts/MyFont.fnt" ),
Gdx.files.internal( "Fonts/MyFont.png" ),
false );
但是我正尝试实现AssetManager。因此,我用以下代码重新编码了该代码段:
AssetManager assetManager = new AssetManager();
assetManager.load( "Fonts/MyFont.fnt", BitmapFont.class );
assetManager.load( "Fonts/MyFont.png", Texture.class );
assetManager.finishLoading();
BitmapFont font = assetManager.get( "Fonts/MyFont.fnt" );
如果失败的话。调用finishLoading()方法返回了一条消息,指示:
无法加载资产的依赖项:“ Fonts / MyFont.fnt”
好的。这是有道理的,因为我没有对纹理做任何事情。那么如何将纹理文件作为依赖项传递呢? github.com/libgdx/libgdx/wiki/Managing-your-assets说:
BitmapFontLoader是异步加载程序的一个很好的例子,它也可以 必须先加载依赖项才能加载实际资产 已加载(在这种情况下,它是存储字形的纹理)。再说一次 可以做任何事情。
Du!我想他们会假设:“ ...如果您只知道怎么做!”但是,他们的示例并没有显示出-实际上,他们的示例几乎显示了我所写的内容。所以,我很困惑。 Google似乎能够找到的所有示例都是使用TTF字体的示例,但对于常规的旧Bitmap字体则没有。
没有人有解决此错误的示例。谢谢一百万!
答案 0 :(得分:3)
使用AssetManager
加载BitmapFont时,将使用BitmapFontLoader类。 Libgdx api文档中说(api)
BitmapFont实例的AssetLoader。异步加载字体描述文件(.fnt),加载包含字形作为依赖项的Texture。
字形纹理作为字体的依赖项自动加载。但是,要知道要加载哪个文件作为纹理,它会在 .fnt 文件中检查纹理的位置。
我怀疑没有使用AssetManager成功加载字体的原因是因为您手动添加了字体的Texture作为参数。
BitmapFont font= new BitmapFont(
Gdx.files.internal( "Fonts/MyFont.fnt" ),
Gdx.files.internal( "Fonts/MyFont.png" ), // This lets it know what texture to use
false );
另一方面,当您使用AssetManager时,它无法找到/加载纹理依赖关系。要解决此问题,请打开 .fnt 文件,并确保file="something.png"
指向您的字体纹理字形。 (它必须与png的名称相同。在您的情况下,file="MyFont.png"
)
希望可以解决您的问题。
我久经考验的代码:
AssetManager manager = new AssetManager();
manager.load("fonts/MyFont.fnt", BitmapFont.class);
manager.finishLoading();
font = manager.get("fonts/MyFont.fnt", BitmapFont.class);
MyFont.fnt文件的摘录:
info face=font size=54 bold=0 italic=0 charset= unicode= stretchH=100 smooth=1
aa=1 padding=2,2,2,2 spacing=0,0 outline=0 common lineHeight=50 base=43 scaleW=243
scaleH=511 pages=1 packed=0
page id=0 file="MyFont.png" <-- The important part
希望能解决您的问题!
还请注意,当我测试AssetManager时,我注意到它仅在.fnt为基本文本时才加载。当我尝试使用使用标签(如html)的.fnt文件时,纹理无法加载。我使用littera来生成用于测试的位图字体。