Libgdx提供了窗口类(Window)让开发者对用户进行提示,或者进行一些输入操作。
Window可以点击标题进行拖动,也可以设置为Modal模式。preferred size是由标题文字和里面装载的Actor共同决定的,当调用pack方法时会重新计算大小。
Dialog extends Window, Dialog是一个模式窗口(Modal Window),提供了content table和button table,很方便的往Dialog找那个添加文字。当点击button时,会调用result方法,而且Dialog会自动消失
下面是代码时间,大家自己运行一下代码就可以看到效果:
Window window;
Dialog dialog;
TextButton tbOk, tbCancel;
Stage stage;
Skin skin;
@Override
public void create() {
stage = new Stage();
Gdx.input.setInputProcessor(stage);
skin = new Skin(Gdx.files.internal("uiskin.json"));
window = new Window("WindowTest", skin);
// 默认文字是在左边显示,需要手动设置居中
window.getTitleLabel().setAlignment(Align.center);
// 默认window的位置是在左下角,需重新设置
window.setX(Gdx.graphics.getWidth() / 2 - window.getWidth() /2 );
window.setY(Gdx.graphics.getHeight() / 2 - window.getHeight() / 2);
// 拖动TitleLabel,window会移动
window.setMovable(false);
tbOk = new TextButton("OK", skin);
tbCancel = new TextButton("CANCEL", skin);
tbOk.setSize(tbCancel.getPrefWidth(), tbCancel.getPrefHeight());
tbCancel.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
window.setVisible(false);
}
});
tbOk.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
Gdx.app.log("TAG", "dialog ok button is clicked");
}
});
tbOk.setX(window.getPrefWidth() / 2 - tbOk.getWidth() / 2 - 10);
tbOk.setY(10);
tbCancel.setX(window.getWidth() / 2 + 10);
tbCancel.setY(10);
// 这个地方用addActor方法,不能使用add方法,后面将讲解Table的时候会涉及到
window.addActor(tbOk);
window.addActor(tbCancel);
Gdx.app.log("TAG", "window preWidth=" + window.getPrefWidth() + "window width=" + window.getWidth());
// window.pack();
stage.addActor(window);
dialog = new Dialog("DialogTest", skin, "dialog");
dialog.getTitleLabel().setAlignment(Align.center);
// 这样无法获得OK事件
// 往Dialog里面添加文字信息(Label形式)
dialog.text("This is Test information");
// 往Dialog里面添加按钮(Button形式),点击按钮后Dialog自动消失
// dialog.button("OK", true).addListener(new ClickListener() {
//
// @Override
// public void clicked(InputEvent event, float x, float y) {
// Gdx.app.log("TAG", "dialog ok button is clicked");
// }
//
// });
// 这个方法和上面方法的效果一样
dialog.button(tbOk);
dialog.setMovable(false);
stage.addActor(dialog);
}
@Override
public void render() {
Gdx.gl.glClearColor(0.39f, 0.58f, 0.92f, 1.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
}
@Override
public void dispose() {
stage.dispose();
skin.dispose();
}
时间: 2024-10-14 00:19:51