我正在LibGDX中构建一个仅限桌面的应用程序。游戏内置了一个地图编辑器,您可以切换到游戏地图并对其进行更改。我想添加一个功能,如果用户单击以关闭窗口并且有未保存的编辑,则会提示您是否要在关闭之前保存更改。实现这种效果的最佳方法是什么?
编辑:我在这个LibGDX项目中使用Lwjgl3。
答案 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)
我可以想到三种方法:
复制LwjglApplication
并根据您的需要修改mainLoop()
。特别是if (Display.isCloseRequested()) exit();
行,然后在LwjglApplication
中使用您自己的DesktopLauncher
实现。
在编辑器中对临时文件中的任何更改始终安全并将其标记为未完成。因此,当用户重新开始游戏时,他可以继续在未完成的级别上工作。
在您的某个实施Display.isCloseRequested()
的条款中检查render()
,然后执行保存。像这样:
void render() {
if(Gdx.app.getType() == Application.Desktop && Display.isCloseRequested()) {
// ask for saving
}
}