如何在libgdx Skin和AssetManager中使用FreeFontType

时间:2016-08-20 11:32:47

标签: libgdx

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

试图按照这个解决方案,但我得到uiskin.json没有加载错误,因为我试图使用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);

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

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

1 个答案:

答案 0 :(得分:0)

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

  

注意:我正在从皮肤中单独加载字体。并在以后添加。如果要引用.json文件中的字体,则需要在尝试加载外观并向SkinLoader添加另一个参数之前调用Assetmanager.finishLoading(): ObjectMap< String,Object> add objectMap.put()的字体,并将其添加到带有
的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的名称。