我想创建一个按钮,在用户悬停或点击时会发生变化。我创建了以下变量。
Button buttonPlay = new Button();
我现在不知道该怎么办,如何加载图片?如何在按钮中写入文本?如何实现事件/效果(悬停、点击)?
如果有人能为按钮编写一些示例代码,那将非常有帮助。
Button buttonPlay = new Button();
我现在不知道该怎么办,如何加载图片?如何在按钮中写入文本?如何实现事件/效果(悬停、点击)?
如果有人能为按钮编写一些示例代码,那将非常有帮助。
在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。buttons.pack
文件? - julian.pack
文件。在Google上搜索一下。 - julian TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
textButtonStyle.font = yourCustomFont;
textButtonStyle.fontColor = Color.WHITE;
stage.add(new TextButton("Custom Btn ", textButtonStyle));