LibGDX防止关闭应用程序(桌面)

时间:2017-08-07 00:21:18

标签: java libgdx

我正在LibGDX中构建一个仅限桌面的应用程序。游戏内置了一个地图编辑器,您可以切换到游戏地图并对其进行更改。我想添加一个功能,如果用户单击以关闭窗口并且有未保存的编辑,则会提示您是否要在关闭之前保存更改。实现这种效果的最佳方法是什么?

编辑:我在这个LibGDX项目中使用Lwjgl3。

2 个答案:

答案 0 :(得分:2)

您只需覆盖LwjglApplication类的退出方法即可拦截对Gdx.app.exit的任何调用,包括当通过Lwjgl Display关闭窗口时应用程序完成的调用。

//desktop
public class DesktopLauncher
{
    public static void main(String[] arg)
    {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();

        config.title = "YourGame";
        config.width = 800;
        config.height = 400;

        new LwjglApplication(new YourGame(), config) {
            @Override
            public void exit()
            {
                if(((YourGame)getApplicationListener()).canClose())
                    super.exit(); 
            }
        };
    }
}

//core
public class YourGame implements ApplicationListener
{
    //...

    public boolean canClose()
    {
        //close logic here
        return true; //return true if you want the close to happen
    }
}

当然,在你的情况下你的地图编辑器应该是一个屏幕,所以你的游戏应该调用当前屏幕的canClose()方法,而不是检查游戏类。

答案 1 :(得分:0)

我可以想到三种方法:

  1. 复制LwjglApplication并根据您的需要修改mainLoop()。特别是if (Display.isCloseRequested()) exit();行,然后在LwjglApplication中使用您自己的DesktopLauncher实现。

  2. 在编辑器中对临时文件中的任何更改始终安全并将其标记为未完成。因此,当用户重新开始游戏时,他可以继续在未完成的级别上工作。

  3. 在您的某个实施Display.isCloseRequested()的条款中检查render(),然后执行保存。像这样:

  4. void render() { if(Gdx.app.getType() == Application.Desktop && Display.isCloseRequested()) { // ask for saving } }