我正和一些朋友一起制作一款游戏,目前我在主菜单上工作。我想出了如何获得常规的旧TextButtons,但ImageTextButtons给了我一个非常艰难的时间。我有两个麦克风图像,一个开启,一个关闭,当用户点击它时它应该会改变。我使用了Texture Packing程序,作为本教程的一部分:https://www.youtube.com/watch?v=YPxd_xbnIpk
我一直在使用的众多解决方案之一如下: MenuState类 -
Private skin = new Skin;
TextureAtlas buttonAtlas = new TextureAtlas ("mutebuttons.pack");
skin.addRegions(buttonAtlas);
TextButtonStyle buttonStyle = new TextButtonStyle();
ImageTextButtonStyle buttonStyle2 = new ImageTextButtonStyle();
buttonStyle.up = skin.getDrawable("soundIconON");
buttonStyle.down = skin.getDrawable("soundIconOFF");
muteButtons.pack已包含开启和关闭麦克风图像(soundIconON / OFF)。
如果您需要更多信息,请告诉我,并提前感谢。 编
答案 0 :(得分:1)
按钮自动检查自己。您不需要执行任何特殊操作,并且始终可以通过.isChecked
获取已检查状态。默认情况下,按钮启动未选中,但您可以在按setChecked(true)
创建按钮时将其更改为已选中。
如果要根据已选中的状态更改按钮的外观,您只需添加可绘制的内容即可。在内部,它的作用类似于If no checked state image just use default image
。
现在对于按钮的类型,我认为只使用图像按钮就可以了,但任何按钮都可以创建一个外观可变的按钮。 ImageButton
只允许您在按钮的背景上添加图像。这些是3个不同按钮的样式:
TextButton.TextButtonStyle textButtonStyle =
new TextButton.TextButtonStyle(
Drawable up, //Background for up state
Drawable down, //background for down state
Drawable checked, //background for checked == true
BitmapFont font); //font
ImageButton.ImageButtonStyle imageButtonStyle =
new ImageButton.ImageButtonStyle(
Drawable up,
Drawable down,
Drawable checked,
Drawable imageUp, //Image for up state
Drawable imageDown, //Image for down state
Drawable imageChecked, //Image for checked == true
BitmapFont font);
//Never actually used this one, you made me aware of it's excistance. I think this is a redundant class.
ImageTextButton.ImageTextButtonStyle imageTextButtonStyle =
new ImageTextButton.ImageTextButtonStyle(
Drawable up,
Drawable down,
Drawable checked,
BitmapFont font);
所以你需要做的就是设置勾选的drawable并开始点击按钮。
您也可以在皮肤文件中设置它们,只需从json
调用正确的可绘制名称即可。这就是我使用文本按钮创建一个简单的切换按钮的方法。
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle:
{
default: { up: my_up_button, checked: my_checked_button, font: default-font, fontColor: white }
}
如果我不希望文字覆盖它只需要一个空字符串。或者,您也可以在点击时更改文本。
final TextButton button = new TextButton("Ewwww! Touch me!", skin);
button.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
super.clicked(event, x, y);
if (button.isChecked())
{
button.setText("Now I am unchecked!");
}
else
{
button.setText("Now I am checked!");
}
}
});