Java Libgdx-使用场景2d更改可视用户界面字体不会';不行,还有别的选择吗?

Java Libgdx-使用场景2d更改可视用户界面字体不会';不行,还有别的选择吗?,java,libgdx,scene2d,freetype,Java,Libgdx,Scene2d,Freetype,我目前正在使用场景2d为我正在制作的libgdx应用程序创建一些用户界面。我发现并意识到这会很顺利。除了字体外,一切都很好 由于VisUI是在场景2d上制作的,所以我尝试使用描述的方法来更改字体 我尝试了简单的答案(也被标记为正确) 然后我尝试了更复杂的答案 VisUI.dispose(true); FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("customText

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

由于VisUI是在场景2d上制作的,所以我尝试使用描述的方法来更改字体

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

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

    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);
我不明白我做错了什么。我不应该使用Scene2d来更改字体吗?还是我忘了什么


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

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

在加载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文件中删除(因为您将通过代码添加它):

在回到对我有效的唯一解决方案后,我使用了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));
AssetManager AssetManager=new AssetManager();
ObjectMap fontMap=新建ObjectMap();
put(“默认字体”,myNewFont);
SkinLoader.SkinParameter参数=新的SkinLoader.SkinParameter(fontMap);
load(“skins/basic/uiskin.json”,Skin.class,参数);
assetManager.finishLoading();
load(assetManager.get(“skins/basic/uiskin.json”,Skin.class));

这似乎对我不起作用。行
skn.load(Gdx.files.internal(“x1/uiskin.json”)
触发序列化错误
,该错误由以下原因引起:com.badlogic.gdx.utils.GdxRuntimeException:No com.badlogic.gdx.graphics.g2d.BitmapFont注册为name:default font
。加载蒙皮时,似乎不会使用已添加的属性。
    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);
com.badlogic.gdx.graphics.g2d.BitmapFont: {
default-font: {file: default.fnt }},
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));