对多个 Button 使用一个 ButtonStyle[Libgdx Scene2d]

Using one ButtonStyle for more than one Button[Libgdx Scene2d]

我正在使用 Libgdx Scene2d 制作一个界面,我有多个按钮,它们都需要不同的样式,这意味着我必须为每个按钮创建一个 buttonStyle 吗?

        btnStyle = new TextButton.TextButtonStyle();
        btnStyle.up = btnSkin.getDrawable("boxBtn");
        btnStyle.checked = btnSkin.getDrawable("boxBtn1");

        btnBox = new Button(btnStyle);

        anotherButton = new Button(newStyle?) //this is what I mean

你的想法是正确的。对于需要不同样式的每个按钮,您将需要不同的 TextButtonStyle.

TextButtonStyle styleOne = new TextButtonStyle();
styleOne.up = ...someDrawable1

TextButtonStyle styleTwo = new TextButtonStyle();
styleTwo.up = ...someDrawable2

TextButton button1 = new TextButton("Button1", styleOne);
TextButton button2 = new TextButton("Button2", styleTwo);

如果您发现自己反复使用同一组样式,则可以创建 static 样式并将其用于您的按钮。

public class Styles {
    public static final TextButtonStyle styleOne = new TextButtonStyle();
    public static final TextButtonStyle styleTwo = new TextButtonStyle();

    public static void initStyles() {
         styleOne.up = ...

         styleTwo.up = ....
    }
}

然后在加载资产后调用 Styles.initStyles()

如果你想自定义每个样式,但仍然使用一组默认样式属性,你可以尝试这样:

public class Styles {

    public static TextButtonStyle createTextButtonStyle(Drawable up, Drawable down) {
        TextButtonStyle style = new TextButtonStyle();
        style.up = up;
        style.down = down;
        style.font = Assets.getDefaultFont() //For example
        style.fontColor = Assets.getDefaultFontColor() //For example
    }
}

那么当你想创建一个按钮时,你可以这样做:

TextButton button = new TextButton("Text", Styles.createTextButtonStyle(drawable1, drawable2));

希望这有助于澄清一些事情。