我目前正在使用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来改变字体吗?或者我忘记了某个地方。
欢迎任何建议。提前谢谢。
答案 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));