在LibGdx中管理位图字体资产

在LibGdx中管理位图字体资产,libgdx,asset-management,bitmap-fonts,Libgdx,Asset Management,Bitmap Fonts,我可以通过以下代码加载位图字体: BitmapFont font= new BitmapFont( Gdx.files.internal( "Fonts/MyFont.fnt" ), Gdx.files.internal( "Fonts/MyFont.png" ), false ); AssetManager assetManager = new AssetManager(); assetManager.load( "

我可以通过以下代码加载位图字体:

BitmapFont font= new BitmapFont( 
            Gdx.files.internal( "Fonts/MyFont.fnt" ),
            Gdx.files.internal( "Fonts/MyFont.png" ), 
            false );
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" );
但是我正在尝试实现AssetManager。因此,我用以下代码重新编码了该代码段:

BitmapFont font= new BitmapFont( 
            Gdx.files.internal( "Fonts/MyFont.fnt" ),
            Gdx.files.internal( "Fonts/MyFont.png" ), 
            false );
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/management-your-assets说:

BitmapFontLoader是异步加载程序的一个很好的例子,它也 具有需要在加载实际资产之前加载的依赖项 已加载(在这种情况下,它是存储图示符的纹理)。再说一次,你 你可以用这个做任何事

嗯,哼!我猜他们会假设,“……如果你知道怎么做的话!”但是,他们的例子并没有说明怎么做——事实上,他们的例子几乎展示了我写的东西。所以,我被难住了。谷歌似乎能找到的都是关于如何使用TTF字体的例子,但对于普通的位图字体却一无所知


是否有人有解决此错误的示例。万分感谢

使用
AssetManager
加载BitmapFont时,将使用BitmapFontLoader类。在libgdxapi文档中,表示()

BitmapFont实例的AssetLoader。异步加载字体描述文件(.fnt),将包含字形的纹理作为依赖项加载

glyphs纹理将作为字体的依赖项自动加载。但是,要知道加载哪个文件作为纹理,它会在.fnt文件中检查纹理的位置

我怀疑在不使用AssetManager的情况下成功加载字体的原因是您手动添加了字体的纹理作为参数

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文件,并确保
文件=“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
info face=font size=54 bold=0 italic=0 charset=unicode=stretchH=100 smooth=1
aa=1填充=2,2,2,2间距=0,0轮廓=0公共线高度=50基底=43缩放=243
scaleH=511页=1页=0

page id=0 file=“MyFont.png”是的,我注意到*.fnt文件是一个简单的文本文件,其中引用了*.png文件。但后来我想到了——字体文件位于资产文件夹下的字体文件夹中;可能*.fnt文件需要告诉assetManager*.png文件也在Font文件夹中。因此,我手动编辑了*.fnt文件,将Font/放在*.png文件名的前面,然后砰的一声,它成功了。我毕竟离这里不远;我所需要的只是朝正确的方向轻轻推一下。非常感谢。嗯。。。我注意到上面MyFont.fnt文件摘录中的MyFont.png引用没有该文件夹。我把它从我的口袋里拿了出来,它也起了作用。现在我想知道实际的解决方案是否只是简单地刷新桌面项目,以查找android/assets/Font文件夹的实际内容。我不知道;但它现在仍然有效,而以前没有。我很高兴。