如何在Libgdx中创建一个按钮?

34
我想创建一个按钮,在用户悬停或点击时会发生变化。我创建了以下变量。
Button buttonPlay = new Button();

我现在不知道该怎么办,如何加载图片?如何在按钮中写入文本?如何实现事件/效果(悬停、点击)?

如果有人能为按钮编写一些示例代码,那将非常有帮助。


我在scene2d方面没有真正的经验,但是这两个链接可以回答你的问题:https://github.com/libgdx/libgdx/wiki/Scene2d.ui#wiki-Button和https://github.com/libgdx/libgdx/wiki/Skin - Daahrien
3个回答

84

在libgdx中,按钮只是一个演员。要呈现一个演员,你可以使用包含屏幕上所有演员、渲染并更新它们的舞台。我假设你想要一个带有文本的按钮,因此应该使用TextButton类并将其添加到舞台中。TextButton需要一个字符串来呈现和一个ButtonStyle(在这种情况下是TextButtonStyle),它基本上是一个包含关于按钮的所有信息的类(字体、渲染未被按下时的可绘制对象、渲染已被按下时的可绘制对象等)。

   public class ButtonExample extends Game{

    Stage stage;
    TextButton button;
    TextButtonStyle textButtonStyle;
    BitmapFont font;
    Skin skin;
    TextureAtlas buttonAtlas;

    @Override
    public void create() {      
        stage = new Stage();
        Gdx.input.setInputProcessor(stage);
        font = new BitmapFont();
        skin = new Skin();
        buttonAtlas = new TextureAtlas(Gdx.files.internal("buttons/buttons.pack"));
        skin.addRegions(buttonAtlas);
        textButtonStyle = new TextButtonStyle();
        textButtonStyle.font = font;
        textButtonStyle.up = skin.getDrawable("up-button");
        textButtonStyle.down = skin.getDrawable("down-button");
        textButtonStyle.checked = skin.getDrawable("checked-button");
        button = new TextButton("Button1", textButtonStyle);
        stage.addActor(button);
    }

    @Override
    public void render() {      
        super.render();
        stage.draw();
    }
}

所发生的事情是什么?我正在创建一个舞台(stage)、字体(font)和一个带有所有按钮纹理的纹理图集(textureatlas),其纹理位于"buttons.pack"中。接着,我初始化了一个空的TextButtonStyle,并添加了字体和纹理以用于按钮的正常(up)、按下(down)和选中(checked)状态。font、up、down和checked都是Drawable类型的静态变量,因此您可以传递任何类型的Drawable(纹理、9-patch等)。然后将按钮简单地添加到舞台中。

现在为了使按钮在被点击时执行某些操作,您需要向按钮添加一个监听器,即ChangeListener。

    button.addListener(new ChangeListener() {
        @Override
        public void changed (ChangeEvent event, Actor actor) {
            System.out.println("Button Pressed");
        }
    });
当然,你应该将按钮添加到一个表中,再将表添加到舞台上,而不是直接将其添加到舞台上,但我不想让这篇文章变得太混乱。这里有一个关于libgdx中表格的很好的教程。 Here

2
非常感谢!!这很有帮助,只有一个问题..我如何创建 buttons.pack 文件? - julian
1
Israel G - 如果你找到了答案,请发布它,这样其他人就不必创建新主题了。 - Patrick Reck
2
不错的教程:http://libdgxtutorials.blogspot.com/2013/09/libgdx-tutorial-10-button-and-stage-2d.html - Someone Somewhere
有没有一个清晰/简洁的信息页面,介绍打包文件如何工作? - Herb Meehan
@HerbMeehan 看起来人们仍然遇到了麻烦。我记得在我的libgdx项目中有一个jar文件,你可以运行它,然后得到一些简单的打包软件,能将图像打包成.pack文件。在Google上搜索一下。 - julian

5
这是在不添加任何皮肤的情况下完成的方法。
    TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
    textButtonStyle.font = yourCustomFont;
    textButtonStyle.fontColor = Color.WHITE;
    stage.add(new TextButton("Custom Btn ", textButtonStyle));

2

2
请提供一个示例或一些代码以使其更清晰,然后提供参考链接,这将更好。 - Prafulla Kumar Sahu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接