以编程方式更改字体时,Libgdx皮肤未更新

时间:2017-08-05 16:04:09

标签: java user-interface libgdx true-type-fonts skin

首先,我将皮肤加载为json文件。在文件中,我放了两个BitmapFont定义(“font”和“big-font”)并将它们留下几乎空白(我确实加载了一个虚拟的“.fnt”文件以防止解析器抱怨)。然后,我使用以下代码生成了两个FreeType字体:

//start font generator
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/button-font.ttf"));
FreeTypeFontGenerator.FreeTypeFontParameter parameters = new FreeTypeFontGenerator.FreeTypeFontParameter();

//default font (the sizes are arbitrary, since it did not work...)
parameters.size = 10;
BitmapFont defaultFont = generator.generateFont(parameters);

//big font
parameters.size = 100;
BitmapFont bigFont = generator.generateFont(parameters);

并将它们设置为皮肤字体,如下所示:

skin.add("font", defaultFont, BitmapFont.class);
skin.add("big-font", bigFont, BitmapFont.class);

问题是gui(特别是使用“font”字体的TextButton)似乎并不关心我以编程方式做的事情,并继续使用我在json文件中设置的虚拟字体。

我做错了什么?是否有更好的方法来集成ttf字体和json皮肤解析?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

请按照以下步骤操作:

  1. 首先,从TTF文件创建字体

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/button-font.ttf"));
    FreeTypeFontParameter parameter = new FreeTypeFontParameter();
    parameter.size = 10;
    BitmapFont defaultFont = generator.generateFont(parameter); 
    generator.dispose(); // don't forget to dispose to avoid memory leaks!
    
  2. 使用默认构造函数创建一个空白外观,并将您的字体添加到外观中。

    Skin skin = new Skin();
    skin.add("font",defaultFont);
    
  3. 将您的地图集文件添加到您的皮肤。

    skin.addRegion(new TextureAtlas(Gdx.files.internal("mySkin.atlas")));
    
  4. 将您的Json文件加载到皮肤上。

    skin.load(Gdx.files.internal("mySkin.json"));
    
  5. 然后,在您的JSON文件中,您可以引用“font”

    {
      font: font
    }