Libgdx - 使用Scene 2d更改Vis UI字体不起作用,还有其他选择吗?

时间:2017-07-21 01:31:08

标签: java libgdx scene2d freetype

我目前正在使用Scene 2d为我正在制作的这个libgdx应用程序创建一些用户界面。我发现Vis UI并意识到它会很好用。除了字体外,一切都很好。

因为Vis UI是在Scene 2d上制作的,所以我尝试使用描述为here的方法来更改字体。

我尝试了简单的答案(也标记为正确)

        Skin skin = VisUI.getSkin();
        VisUI.dispose(false);
        FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("customText.ttf"));
        FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 14;
        skin.add("default-font", generator.generateFont(parameter), BitmapFont.class);
        skin.add("small-font", generator.generateFont(parameter), BitmapFont.class);
        VisUI.load(skin);

然后我尝试了更复杂的答案

    VisUI.dispose(true);

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("customText.ttf"));
    FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 14;

    ObjectMap<String, Object> fontMap = new ObjectMap<String, Object>();
    fontMap.put("default-font", generator.generateFont(parameter));
    fontMap.put("small-font", generator.generateFont(parameter));

    SkinLoader.SkinParameter par = new SkinLoader.SkinParameter(fontMap);

    assets.load(VisUI.SkinScale.X1.getSkinFile().path(), Skin.class, par);
    assets.finishLoading();

    Skin skin = assets.get(VisUI.SkinScale.X1.getSkinFile().path());
    VisUI.load(skin);

这两种方法都没有真正与ScrollableTextArea

产生影响

之前的代码放在构造函数中,我确保在更改VisUI之后创建了VisWindow,因为我将窗口创建放在libgdx的Screen界面中的show()方法中。

VisWindow内,基本上是以下项目,就是这样。

    textArea = new ScrollableTextArea("...");

    VisTable table = new VisTable();

    VisScrollPane scrollPane = new VisScrollPane(table);
    scrollPane.setFlickScroll(false);
    scrollPane.setFadeScrollBars(false);

    add(textArea.createCompatibleScrollPane()).growX().growY().row();

我不知道我做错了什么。我不应该使用Scene2d来改变字体吗?或者我忘记了某个地方。

欢迎任何建议。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您需要在加载其余小部件之前添加字体。

在加载VisUI之前,首先尝试创建外观。然后添加字体,atlas和json文件。然后使用VisUI加载生成的皮肤。

    Skin skn = new Skin();
    skn.add("default-font", font12, BitmapFont.class);

    skn.addRegions(new TextureAtlas(Gdx.files.internal(("x1/uiskin.atlas"))));
    skn.load(Gdx.files.internal("x1/uiskin.json"));
    VisUI.load(skn);

在皮肤json文件中删除(因为你将通过代码添加它):

com.badlogic.gdx.graphics.g2d.BitmapFont: {
default-font: {file: default.fnt }},

答案 1 :(得分:0)

回到Putting Freetypefont into libgdx skin后,唯一对我有用的解决方案是使用AssetManager。例如:

AssetManager assetManager = new AssetManager();
ObjectMap<String, Object> fontMap = new ObjectMap<String, Object>();
fontMap.put("default-font", myNewFont);
SkinLoader.SkinParameter parameter = new SkinLoader.SkinParameter(fontMap);
assetManager.load("skins/basic/uiskin.json", Skin.class, parameter);
assetManager.finishLoading();
VisUI.load(assetManager.get("skins/basic/uiskin.json", Skin.class));