我是libgdx的新手,我一直在努力学习如何创建按钮和添加纹理的教程,但是我真的很努力。如何向“继续”和“后退”按钮添加纹理?我只有png图像和纹理的.pack文件
另外,如果有人能建议一些方法,我可以改变字体的标签,我为我的按钮,如lbl\u ip
任何帮助都将不胜感激。
public class MenuScreen implements Screen {
private Viewport viewport;
private Stage stage;
@SuppressWarnings("unused")
private MainGame game;
private Label lbl_ip;
private Label lbl_name;
private Label lbl_back;
private LabelStyle lbl_style;
private Skin txt_skin;
private TextButtonStyle btn_style;
private TextField txt_ip;
private TextField txt_name;
//private TextField txt_back;
private Button btn_confirm;
private Button btn_back;
public static String ip = "localhost"; // change with user input
public static String name = "Player 1";
public static String back = "<---";
public MenuScreen(MainGame game) {
this.game = game;
viewport = new FitViewport(MainGame.V_WIDTH/6, MainGame.V_HEIGHT/6, new OrthographicCamera());
stage = new Stage(viewport, ((MainGame) game).batch);
lbl_style = new Label.LabelStyle();
lbl_style.font = new BitmapFont();
txt_skin = new Skin(Gdx.files.internal("uiskin.json"));
btn_style = new TextButton.TextButtonStyle();
btn_style.font = new BitmapFont();
Table table = new Table();
table.top();
table.setFillParent(true);
lbl_ip = new Label("please enter an IP address:" , lbl_style);
lbl_name = new Label("enter your name: " , lbl_style);
lbl_back = new Label("Return to Main Menue", lbl_style);
txt_ip = new TextField(ip, txt_skin);
txt_name = new TextField(name, txt_skin);
//txt_back = new TextField(back, txt_skin);
btn_confirm = new TextButton("confirm", btn_style);
btn_back = new TextButton("<--", btn_style);
table.add(lbl_ip).expandX();
table.add(txt_ip).width(200);
table.row();
table.add(lbl_name).expandX();
table.add(txt_name).width(200);
table.row();
//table.add(lbl_back).expandX();
table.add(btn_back);
//table.add(txt_back).width(200);
table.row();
table.add(btn_confirm);
table.row();
stage.addActor(table);
Gdx.input.setInputProcessor(stage);
}
private void buttonHandler() {
if(Gdx.input.isKeyPressed(Input.Keys.ENTER)) {
/*
game.setScreen(new PlayScreen(game));
*/
txt_ip.setTextFieldListener(new TextField.TextFieldListener() {
@Override
public void keyTyped(TextField textField, char c) {
ip = textField.getText();
}
});
txt_name.setTextFieldListener(new TextField.TextFieldListener() {
@Override
public void keyTyped(TextField textField, char c) {
name = textField.getText();
}
});
new MPClient(txt_ip.getText(), txt_name.getText(), game);
dispose();
}
}
@Override
public void show() {
// TODO Auto-generated method stub
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0 , 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
stage.act(delta);
buttonHandler();
}
@Override
public void dispose() {
stage.dispose();
}
}
2条答案
按热度按时间suzh9iv81#
你需要使用
ImageTextButton
为了这个。你需要提供ImageTextButtonStyle
,这很容易创建(您需要指定imageUp
属性,其他属性可以为空)。至于标签字体,您需要创建一个新的
LabelStyle
给它分配一个新的BitmapFont
. 举个例子:“myfont”是一个
BitmapFont
. 下面是一个如何创建BitmapFont
:s4n0splo2#
您需要更改与小部件关联的样式。您可能希望为每个小部件创建一个新样式,而不是在所有小部件之间共享一个样式(因为这样会用新的背景更新所有小部件)
改变字体有点棘手。。。字体作为位图烘焙到样式中(用于渲染速度)。你可能会发现,如果你不喜欢你的风格背景,甚至字体,你可能想使用不同的皮肤。你可以自己做,也可以在这里用。https://github.com/czyzby/gdx-skins
如果必须动态选择字体,可以使用gdxfreetype字体管理器动态构建呈现字体的位图https://jitpack.io/p/1nt3g3r/gdx-freetype-font-manager