将 Freetypefont 放入 libgdx 皮肤

Posted

技术标签:

【中文标题】将 Freetypefont 放入 libgdx 皮肤【英文标题】:Putting Freetypefont into libgdx skin 【发布时间】:2014-09-11 10:23:53 【问题描述】:

在我的 uiskin.json 我有这个

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

当我在资产文件夹的文本文件夹中有 default.fnt 时,这很好......

但是我想使用 Freetypefont。

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

【问题讨论】:

【参考方案1】:

这是不可能的,因为你要在运行时生成它。

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

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

【讨论】:

感谢您的回复...文本实际上不是空白的,但它具有“旧”字体而不是新添加的字体。 知道了...如果我可以添加它,一旦我删除了 json 文件中已经存在的“默认字体”,它就会起作用。 [链接]badlogicgames.com/forum/…【参考方案2】:

更新

感谢Jos van Egmond 的评论告诉我如何做到这一点,并且仍然从AssetManager 加载Skin 我决定更新答案。旧的答案(以及这样做的替代方法)在下面仍然保持不变。

新程序如下:

加载字体文件。 创建一个ObjectMap<String, Object> 并将您的字体放入此地图中。 创建一个SkinParameter 并将ObjectMap 作为参数提供给它。 使用创建的SkinParameter 像往常一样通过AsserManager 加载您的Skin

代码可能如下所示:

/* 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);

当前接受的答案实际上(有点)不正确。 This blog post 描述了一种在 Json 文件中引用生成的 BitmapFonts 的方法。过程是这样的:

使用默认构造函数创建空白皮肤文件。 将字体添加到皮肤中。 将您的地图集文件添加到您的皮肤中。 将您的 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",
...

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

【讨论】:

要通过 AssetManager 加载自定义字体的皮肤,您可以使用 SkinParameter 类中的资源映射参数并在其中传递 BitmapFont。 @JosvanEgmond 谢谢,我没有想到这一点。我更新了答案。

以上是关于将 Freetypefont 放入 libgdx 皮肤的主要内容,如果未能解决你的问题,请参考以下文章

LibGDX - 无法加载FreetypeFont资产的依赖项

如何在 Linux 上设置 LibGDX 的 fbx-conv

LibGDX开发 - Tiled地图 之 图层

如何使用 Gradle 将 jar 文件添加到 libgdx 项目

将 Fabric 与 Libgdx 集成

如何将 Libgdx 游戏部署到 iOS