【问题标题】:How to use FreeFontType with libgdx Skin and AssetManager如何将 FreeFontType 与 libgdx 皮肤和 AssetManager 一起使用
【发布时间】:2016-08-20 11:32:47
【问题描述】:

到目前为止,从我所做的所有阅读中,我确信我不能像位图字体一样将 freefonttype 直接放入 uiskin.json 中,我必须在运行时以编程方式将它们添加到皮肤中。

尝试遵循此解决方案,但在尝试使用 AssetManager 访问 Skin 时出现 uiskin.json 未加载错误。 http://badlogicgames.com/forum/viewtopic.php?f=11&t=10152

public void loadSkins() {
    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("font/font.ttf"));
    FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 32;
    BitmapFont font12 = generator.generateFont(parameter); // font size 12 pixels
    generator.dispose();
    Skin skin = new Skin();
    skin.add("myfont", font12, BitmapFont.class);
    skin.load(Gdx.files.internal("data/uiskin.json"));
}

此代码在我的 AssetManager 类中,所有资产都被加载,除了 uiskin.json

如果我用下面的代码替换 loadSkins 中的整个代码,那么它就会被加载。

manager.load("data/uiskin.json", Skin.class);

现在,如果我尝试访问我的 Skin 类,应用程序会因资产 uiskin.json 未加载错误而崩溃。这是我访问 Skin 类的方法

manager.get("data/uiskin.json");

【问题讨论】:

    标签: libgdx


    【解决方案1】:

    也就是说,因为您需要使用资产管理器加载皮肤,而不仅仅是皮肤。资产管理器中有一个额外的加载器,称为 SkinLoader。如果你给它 Texture Atlas,它应该会加载你的皮肤。

    注意:我将字体与皮肤分开加载。稍后再添加。如果要在 .json 文件中引用字体,则需要在尝试加载皮肤之前调用 Assetmanager.finishLoading() 并向 SkinLoader 添加另一个参数:ObjectMap 添加使用 objectMap.put() 将字体添加到 SkinLoader 中,并使用
    new SkinLoader.SkinParameter("skins/uiskin.atlas", objectMap)

        // Queue font
        FileHandleResolver resolver = new InternalFileHandleResolver();
        app.assetManager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
        app.assetManager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));
        FreetypeFontLoader.FreeTypeFontLoaderParameter params = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
        params.fontFileName = "font/stay_writer.ttf";
        params.fontParameters.size = 30;
        app.assetManager.load("stay_writer_30.ttf", BitmapFont.class, params);
        // Queue Skin
        app.assetManager.load("skins/uiskin.atlas", TextureAtlas.class);
        app.assetManager.load("skins/uiskin.json", Skin.class, new SkinLoader.SkinParameter("skins/uiskin.atlas"));
    

    稍后将字体添加到皮肤:

    skin.add("default-font", app.assetManager.get("stay_writer_30.ttf", BitmapFont.class));

    其中“default-font”是 .json 文件中字体的名称,“stay_writer_30.ttf”是 freetypefont 的名称。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 1970-01-01
      • 2014-09-11
      • 2014-06-22
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 2015-12-24
      相关资源
      最近更新 更多