Как использовать FreeFontType с оболочкой libgdx и AssetManager

libgdx

284 просмотра

1 ответ

До сих пор из всех прочитанных мною работ, я уверен, что я не могу поместить freefonttype непосредственно в uiskin.json, как растровые шрифты, и мне нужно добавлять их в скин программно во время выполнения.

Попытка следовать этому решению, но я получаю ошибку uiskin.json не загружен, так как я пытаюсь получить доступ к Skin с помощью AssetManager. 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);

Теперь, если я пытаюсь получить доступ к своему классу скинов, приложение вылетает с ошибкой не загруженного ресурса uiskin.json. Вот как я получаю доступ к классу Skin

manager.get("data/uiskin.json");
Автор: Rohit Goyal Источник Размещён: 08.11.2019 11:14

Ответы (1)


0 плюса

Это потому, что вам нужно загрузить скин с помощью менеджера ресурсов, а не только скин. В диспетчере ресурсов есть дополнительный загрузчик, называемый SkinLoader. Если вы дадите ему Атлас текстуры, он должен загрузить вашу кожу.

Примечание: я загружаю шрифт отдельно от кожи. И добавлю это позже. Если вы хотите сослаться на шрифт в вашем файле .json, вам нужно вызвать Assetmanager.finishLoading (), прежде чем пытаться загрузить скин и добавить другой параметр в ваш SkinLoader: ObjectMap добавить шрифт к нему с помощью objectMap. положить () и добавить его в SkinLoader с
новым 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.

Автор: Schokokuchen Bäcker Размещён: 01.09.2016 01:00
Вопросы из категории :
32x32