将Freetypefont放入libgdx皮肤

时间:2014-07-21 00:22:37

标签: java libgdx freetype scene2d

在我的uiskin.json中我有这个

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

这适用于我在assets文件夹的text文件夹中有default.fnt ...

但是我想使用Freetypefont。

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

2 个答案:

答案 0 :(得分:10)

更新

感谢Jos van Egmond的评论告诉我如何执行此操作并仍然从Skin加载AssetManager我决定更新答案。旧的答案(以及这样做的替代方法)仍未触及。

新程序如下:

  • 加载字体文件。
  • 创建ObjectMap<String, Object>并将字体放入此地图中。
  • 创建SkinParameter并将ObjectMap作为参数提供。
  • 使用创建的Skin照常将AsserManager加载到SkinParameter

代码可能如下所示:

/* 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的方法。程序如下:

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

答案 1 :(得分:4)

事先不可能这样做,因为你打算在运行时生成它。

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

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