在对话框中按下确定按钮后更改屏幕

时间:2021-06-03 20:13:09

标签: java libgdx

我试图在更改屏幕之前向用户显示带有对话框的成功消息。我希望它等待用户单击确定按钮或按 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);
    }
}

感谢任何帮助。

1 个答案:

答案 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);
    }
}

也许不是最优雅的方式,但它应该可以解决问题。

相关问题