我试图在更改屏幕之前向用户显示带有对话框的成功消息。我希望它等待用户单击确定按钮或按 Enter 键,然后更改屏幕。由于我必须在我的程序中放置大量对话框,以避免重复,我尝试在我的 MainClass 中使用一个 createDialog 方法来创建对话框,并将其添加到我传递给该方法的阶段。但问题是我希望它在用户按下 ok 按钮后将屏幕更改为我传递给它的屏幕,但对话框的结果函数是一个内部方法,它不访问我传递给函数的屏幕。那么有什么办法可以做到这一点吗?
public class MainClass extends Game {
.
.
.
public void createDialog(String message, boolean isWarning, Stage stage, Screen screen) {
Skin skin2Json = new Skin(Gdx.files.internal("freezing/skin/freezing-ui.json"));
Dialog dialog;
String title = "Success Message";
if (isWarning) title = "Error";
dialog = new Dialog(title, skin2Json, "dialog"){
@Override
protected void result(Object object) {
if((Boolean) object)
//if it is a success message ,I want to set screen to the screen passed to the createDialog function
}
};
dialog.getBackground().setMinWidth(400);
dialog.getBackground().setMinHeight(200);
dialog.text(message);
dialog.button("Ok", true);
dialog.key(Input.Keys.ENTER, true);
dialog.show(stage);
}
}
感谢任何帮助。
答案 0 :(得分:0)
我猜你可以用不同的方法来做到这一点,但我的方法是:
那会给出类似的东西:
public class MainClass extends Game {
private Boolean ChangeScreen = false;
public void render () {
// This is your typical render function
if(ChangeScreen) Game.setscreen(new MyOtherScreen());
}
public void createDialog(String message, boolean isWarning, Stage stage, Screen screen) {
Skin skin2Json = new Skin(Gdx.files.internal("freezing/skin/freezing-ui.json"));
Dialog dialog;
String title = "Success Message";
if (isWarning) title = "Error";
dialog = new Dialog(title, skin2Json, "dialog"){
@Override
protected void result(Object object) {
if((Boolean) object)
// The OK button has been hit
ChangeScreen = true;
}
};
dialog.getBackground().setMinWidth(400);
dialog.getBackground().setMinHeight(200);
dialog.text(message);
dialog.button("Ok", true);
dialog.key(Input.Keys.ENTER, true);
dialog.show(stage);
}
}
也许不是最优雅的方式,但它应该可以解决问题。