首页 > 解决方案 > 如何让两个或多个不同的字体文件在 libgdx 中使用一个通用的 Atlas?

问题描述

我为不同的屏幕使用不同的字体。有些字体只有几个字母,因此为每种字体生成图集会效率低下。那么有没有办法让我的所有字体都使用一个图集?

标签: libgdx

解决方案


您可以使用带有 TextureRegion 的构造函数。例如,如果您的字体和图像被命名为myFont.fntand myFont.png,您可以将myFont.png其余的 sprite 源图像放入并将其打包到纹理图集中。将.fnt文件与您的其余资产一起放入。然后在加载纹理图集后:

myFont = new BitmapFont(Gdx.files.internal("myFont.fnt"), myTextureAtlas.findRegion("myFont"));

要在皮肤中使用它,您需要在加载 Json 文件之前将其添加到皮肤:

skin = new Skin(); // instantiate blank skin
skin.add(myFont, "myFont");
skin.load(Gdx.files.internal("mySkin.json"));

Json 文件可以通过您在将字体添加到皮肤时使用的名称来引用字体。

虽然,我强烈建议对所有事情都使用 AssetManager。在这种情况下,您的皮肤 Json 可以正常定义字体。除了以通常的方式将所有内容加载到资产管理器之外,您需要的唯一额外步骤是添加一个 BitmapFontLoader.BitmapFontParameter 来指定包含该区域的 TextureAtlas。AssetManager 将使用它来确定 BitmapFont 是否依赖于图集,因此它将以正确的顺序加载它们。

BitmapFontLoader.BitmapFontParameter fontParam = new BitmapFontLoader.BitmapFontParameter(){{
    atlasName = "mySkin.pack";
}};
assetManager.load("myFont.fnt", BitmapFont.class, fontParam);

该图集应该与皮肤使用的图集相同。


推荐阅读