java - 以编程方式更改字体时 Libgdx 皮肤不更新

标签 java user-interface libgdx truetype 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(特别是 TextButton,它使用“font”字体)似乎并不关心我以编程方式执行的操作,并继续使用我在 json 文件中设置的虚拟字体。

我做错了什么?有没有更好的方法来整合ttf字体和json皮肤解析?

预先感谢您的帮助。

最佳答案

请按照以下步骤操作:

  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
    }
    

关于java - 以编程方式更改字体时 Libgdx 皮肤不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523878/

相关文章:

java - 桌面上的 libGDX Midi 音量控制

java - 我的程序无法绘制/渲染它所需要的内容

java - 每晚构建 - 需要一次处理一个而不是列表

java - 如何将 Javascript 中的数组打乱为与 Java 中的 Collections.shuffle(array, seeds) 相同的顺序

performance - 了解用户 - 性能特朗普看起来像吗?

user-interface - 我如何通过浏览器从测试到使用 Arquillian Drone 和 Graphene 进行测试

java - 如何使用 Apache ivy 解决多个文件的依赖关系?

java - 无法在服务中接收用户区域设置

.net - 确定是什么阻塞了 UI 线程

android - 在两个 Actor 之间绘制视线