将 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 文件中引用生成的 BitmapFont
s 的方法。过程是这样的:
代码可能如下所示:
// 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