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

Posted

技术标签:

【中文标题】如何在 Libgdx 中创建一个按钮?【英文标题】:How to create a button in Libgdx? 【发布时间】:2014-02-24 15:13:14 【问题描述】:

我想创建一个按钮,当用户悬停或单击它时会发生变化。 我创建了以下变量

Button buttonPlay = new Button();

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

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

【问题讨论】:

我没有真正的scene2d经验,但是这2篇文章有你的答案:github.com/libgdx/libgdx/wiki/Scene2d.ui#wiki-Buttongithub.com/libgdx/libgdx/wiki/Skin 【参考方案1】:

按钮只是 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();
    

那么这里发生了什么?我正在为“buttons.pack”中的按钮创建一个包含所有纹理的舞台、字体和纹理图集。然后我初始化一个空的 TextButtonStyle 和 我为向上、向下和选中状态添加字体和纹理。 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");
        
    );

当然,不是直接将按钮添加到舞台,您应该将其添加到表格并将表格添加到舞台,但我不想让这篇文章太混乱。 Here 是一个很好的关于 libgdx 表的教程。

【讨论】:

非常感谢!!太有帮助了,只有一个问题.. 我怎样才能创建 buttons.pack 文件? Israel G - 如果您找到了答案,请将其发布,这样其他人就不必创建新主题了 不错的教程:libdgxtutorials.blogspot.com/2013/09/… 是否有关于包文件如何工作的清晰/干净的信息页面? @HerbMeehan 似乎人们仍然遇到麻烦,我记得,我的 libgdx 项目中有一个 jar 文件可以运行,并且您可以获得一些简单的打包软件,可以将图像打包到.pack 文件。在 Google 上搜索。【参考方案2】:

buttons.pack 是从 libgdx 纹理打包器生成的文件,纹理打包器是可以用来生成纹理图集的工具,即可以使用单个文件加载到 GUI 的多个图像。它也有助于节省一些内存请参考这个链接`https://code.google.com/p/libgdx-texturepacker-gui/downloads/list, https://github.com/libgdx/libgdx/wiki/Texture-packer

【讨论】:

举个例子或者一些代码,让它更清楚再给出参考链接,这样会更好。【参考方案3】:

这就是你如何在不添加任何皮肤的情况下做到这一点

    TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
    textButtonStyle.font = yourCustomFont;
    textButtonStyle.fontColor = Color.WHITE;
    stage.add(new TextButton("Custom Btn ", textButtonStyle));

【讨论】:

以上是关于如何在 Libgdx 中创建一个按钮?的主要内容,如果未能解决你的问题,请参考以下文章

在 Libgdx 中创建水

如何在LibGDX中实现Sugar ORM

导出在 Blender 中创建并在 libgdx 中使用的 fbx 对象的选项

如何在 Swift 中创建一个圆形按钮? [关闭]

如何在 iOS8 的通知窗口中创建按钮?

如何在 Kotlin 中创建一个打开新活动(Android Studio)的按钮?