我最近在libGDX程序中发现了一个奇怪的问题。当我开始我的程序时,我首先显示SplashScreen
,然后显示MainMenu
屏幕,然后您可以输入该程序。问题是,如果我在主菜单上更改screen
,我的所有TextButton
都会变成黑色,并且文本字符会变成黑框。
(我使用启动按钮重新加载了MainMenu)
这会影响所有其他屏幕中的所有TextBox。我的想法是,我的JSON在某种程度上是错误的。因为当我停止使用我的JSON中的drawable并使用FreeTypeFont
而不是BitmapFont
时,至少该字体不再变黑。我已经使用了验证器,他们说我的JSON没有问题,但无论如何它都是(TextButtonStyle
在底部):
{
"com.badlogic.gdx.graphics.Color": {
"white": {
"r": 1,
"g": 1,
"b": 1,
"a": 1
},
"black": {
"r": 0,
"g": 0,
"b": 0,
"a": 1
},
"red": {
"r": 1,
"g": 0,
"b": 0,
"a": 1
},
"green": {
"r": 0,
"g": 1,
"b": 0,
"a": 1
},
"blue": {
"r": 0,
"g": 0,
"b": 1,
"a": 1
},
"dark_grey": {
"r": 0.8,
"g": 0.8,
"b": 0.8,
"a": 1
}
},
"com.badlogic.gdx.graphics.g2d.BitmapFont": {
"white": {
"file": "data/fonts/white.fnt"
},
"black": {
"file": "data/fonts/black.fnt"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle": {
"default": {
"titleFont": "black",
"titleFontColor": "dark_grey"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": {
"default": {
"font": "white",
"fontColor": "white"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle": {
"default": {
"font": "white",
"fontColorUnselected": "white",
"fontColorSelected": "black",
"selection": "default.selection"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle": {
"default": {
"hScrollKnob": "button.up",
"vScrollKnob": "button.up"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": {
"default": {
"up": "button.up",
"down": "button.down",
"font": "black",
"pressedOffsetX": 1,
"pressedOffsetY": -1
}
}
}
这是我添加和更改按钮样式的代码。
// Splash Screen button
buttonSplash = new TextButton("SPLASH SCREEN", skin);
buttonSplash.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
// When you click the button, create a new screen
((Game) Gdx.app.getApplicationListener()).setScreen(new SplashScreen());
}
});
buttonSplash.pad(20);
//Rest of the buttons....
如果你觉得你需要整个代码,我也可以发布,但这是相当长的,这就是为什么我不发布它。
即时编辑:尝试使用全新的JSON(libGDX附带的JSON),我仍然遇到同样的问题。
答案 0 :(得分:0)
似乎问题来自于处置skin
。我在外部类中使用static Skin
对象作为我的皮肤,所有需要该皮肤的类都使用它。我的问题是我把皮肤放在其中一个屏幕上,这个屏幕处理了所有其他课程都使用的皮肤。我通过简单地在类中创建一个包含所有皮肤的dispose();
方法来解决这个问题,并在我退出游戏时将其处理掉。