如何在libgdx中向textButtons添加纹理



我是libGDX的新手,我一直在尝试学习如何创建按钮并向其添加纹理的教程,但我真的很难。我该如何向继续和返回按钮添加纹理?我只有png图像和纹理的.pack文件

此外,如果有人能提出一些方法,我可以更改我的按钮标签的字体,例如lbl_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();
}
}

您需要使用ImageTextButton。您需要为它提供ImageTextButtonStyle,这很容易创建(您需要分配其imageUp属性,其他属性可以为null(。

就标签字体而言,您需要创建一个新的LabelStyle并为其分配一个新BitmapFont。一个例子:

Label lab = new Label("This is the text", new LabelStyle(myFont, Color.RED));

"myfont"是CCD_ 6。下面是一个如何创建BitmapFont:的真实例子

FreeTypeFontGenerator generator;
FreeTypeFontParameter parameter;
generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/nidsans-webfont.ttf"));
parameter = new FreeTypeFontParameter();
parameter.size = 12;
parameter.minFilter = TextureFilter.Linear;
parameter.magFilter = TextureFilter.Linear;
myfont = generator.generateFont(parameter);

您需要更改与小部件关联的-style-。你可能想为每个小部件创建一个新的样式,而不是在所有小部件之间共享一个样式(因为这会用新的背景更新所有小部件(

LabelStyle newLabelStyle = new LabelStyle(originalLabel.getStyle());
tobeChangedLabel.setStyle(newLabelStyle);
newLabelStyle.background = new Image( //however you like to make the image

更改字体有些棘手。。。因为字体以位图的形式烘焙到样式中(为了渲染速度(。你可能会发现,如果你不喜欢你的风格背景,甚至不喜欢字体,你可能想使用不同的皮肤。你可以自己做,也可以在这里使用。https://github.com/czyzby/gdx-skins

如果你必须动态选择字体,你可以使用gdxfreetype字体管理器动态构建渲染字体的位图https://jitpack.io/p/1nt3g3r/gdx-freetype-font-manager

最新更新