4

Button当我的一些事件被触发时,我需要能够改变 Libgdx 的外观。

这是我的按钮的声明:

Button googleButton = new Button(skin.getDrawable("google_sign_in"));

以下是我尝试过的事情:

googleButton.setBackground(skin.getDrawable("google_sign_out"));
googleButton.invalidate();

googleButton.setChecked(true);
googleButton.invalidate();

googleButton.getStyle().up = skin.getDrawable("google_sign_out");
googleButton.invalidate();

我已经做了很多搜索,但我找不到答案。有人可以告诉我这样做的正确方法吗?

4

5 回答 5

6

我认为问题在于您在初始化后更改了皮肤/样式的内容Button,但按钮对象在初始化后没有引用样式。我也不完全清楚你要做什么。我假设您要显示“登录”按钮,直到用户登录,然后您希望该按钮成为“退出”按钮。

invalidate方法只是触发重新布局(重新计算 的大小/位置Actor)。

也许尝试使用 强制样式setStyle,如下所示:

   googleButton.getStyle().up = ... whatever;
   googleButton.setStyle(googleButton.getStyle());

也就是说,我认为你最好拥有两个(?)不同的Button对象(一个用于登录,一个用于注销)。将它们打包成一个Stack,然后让其中一个或另一个不可见(请参阅Actor.setVisible

于 2013-06-29T06:16:33.460 回答
2

我设法让它工作。在我的 Actor 中,一个有 6 个可能图像的骰子:

public Dice(int options) {
    super(new Button.ButtonStyle());
}

当我想换脸时:

public void setValue(int value) {
    this.value = value;
    Button.ButtonStyle style = getStyle();
    style.up = new TextureRegionDrawable(
            Assets.instance.dices.facesUp[value]);
    style.down = new TextureRegionDrawable(
            Assets.instance.dices.facesDown[value]);
    style.checked = new TextureRegionDrawable(
            Assets.instance.dices.facesChecked[value]);
    setSize(getPrefWidth(), getPrefHeight());
}

我认为诀窍在于

setSize(getPrefWidth(), getPrefHeight());

如果我省略它,则不会显示骰子。并且不需要 setStyle 或 invalidate()。

于 2014-06-07T07:19:33.530 回答
1

改用CheckBox类;

1-为皮肤制作一个.json文件

{
com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: fontfile.fnt } },
com.badlogic.gdx.graphics.Color: {
    green: { a: 1, b: 0, g: 1, r: 0 },
    white: { a: 1, b: 1, g: 1, r: 1 },
    red: { a: 1, b: 0, g: 0, r: 1 },
    black: { a: 1, b: 0, g: 0, r: 0 }
  },
com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
    google-loggin: { checkboxOn: google_sign_in, checkboxOff: google_sign_out, font: default-font, fontColor: white }
},
}

2-制作皮肤

skin = new Skin(Gdx.files.internal("your.json-file.json"), new TextureAtlas("textureAtlas-file.pack"));

3-创建忽略第一个参数的按钮:

CheckBox loginButton = new CheckBox("", skin, "google-loging");
于 2015-01-19T22:38:54.023 回答
0

您必须将图像添加到按钮button_1.addActor(image)。此图像将覆盖按钮源皮肤。然后你可以关闭和打开这个图像image.setVisible(false)

于 2020-12-09T20:12:54.507 回答
0

仅适用于通过谷歌搜索此内容的任何人。要在已经初始化之后从已经添加到皮肤文件的样式更改按钮的样式:

btn.setStyle(skin.get("YOUR BTN STYLE",TextButton.TextButtonStyle.class));
于 2017-02-18T15:19:52.817 回答