【问题标题】:Putting Freetypefont into libgdx skin将 Freetypefont 放入 libgdx 皮肤
【发布时间】: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 文件中?

【问题讨论】:

    标签: java libgdx freetype scene2d


    【解决方案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 谢谢,我没有想到这一点。我更新了答案。
    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2015-12-24
    • 2017-04-27
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多