将 Freetypefont 放入 libgdx 皮肤

2022-09-03 13:30:54

在我的uiskin.json中,我有这个

com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: text/default.fnt } }

当我有默认值时.fnt在assets文件夹中的文本文件夹中,这很好...

但是我想使用Freetypefont。

如何创建一个Freetypefont并将其加载到uiskin文件中?


答案 1

更新

感谢Jos van Egmond的评论告诉我如何做到这一点,并且仍然加载我决定更新答案。旧的答案(以及这样做的另一种方式)在下面仍然没有改变。SkinAssetManager

新过程如下所示:

  • 加载字体文件。
  • 创建一个 ObjectMap<String、Object>并将字体放入此地图中。
  • 创建 一个并将其作为参数提供。SkinParameterObjectMap
  • 像往常一样使用创建的.SkinAsserManagerSkinParameter

代码可能如下所示:

/* Load your fonts */
load font1...
load font2...

/* Create the ObjectMap and add the fonts to it */
ObjectMap<String, Object> fontMap = new ObjectMap<String, Object>();
fontMap.put("font1", font1);
fontMap.put("font2", font2);

/* Create the SkinParameter and supply the ObjectMap to it */
SkinParameter parameter = new SkinParameter(fontMap);

/* Load the skin as usual */
assetManager.load("file/location/of/your/skin", Skin.class, parameter);

目前接受的答案实际上(有点)不正确。这篇博客文章介绍了一种在 Json 文件中引用生成的 s 的方法。该过程如下所示:BitmapFont

  • 使用默认构造函数创建空白外观文件。
  • 将字体添加到外观。
  • 将图集文件添加到您的皮肤。
  • 将 Json 文件加载到外观。

代码可能如下所示:

// Create a new skin using the default constructor and
// add your fonts to it.
Skin skin = new Skin();
skin.add("myFont", myFont, BitmapFont.class);

// Remember that this texture atlas is NOT automatically disposed by the skin, 
// so keep a reference and dispose of it yourself.
skin.addRegion(new TextureAtlas("file/location/of/your/atlas");
skin.load(Gdx.files.internal("file/location/of/your/skin"));

现在,您可以在皮肤 Json 中执行类似操作:

...,
font: "myFont",
...

虽然这是一种解决方法,但这也意味着您无法(至少我还没有找到一种方法)通过.不过,您仍然可以通过管理器加载。AssetManagerTextureAtlas


答案 2

事先无法执行此操作,因为您将在运行时生成它。

我的解决方法是保持默认字体不变,并在运行时通过代码替换它。你可以使用 Skin.add(...) 来实现这一点。

BitmapFont newDefaultFont = FreeTypeFontGenerator...;
skin.add("default-font", newDefaultFont, BitmapFont.class);

推荐