桌面上的Libgdx,窗口关闭时如何处理处理

时间:2014-04-08 17:57:06

标签: java android libgdx

我使用libgdx(com.badlogic.gdx.Game和Screens以及那些东西)制作游戏。我有以下问题:在桌面上,当我关闭窗口(从顶部的十字架),当然应用程序关闭。但我想回到菜单屏幕并在那里处置,因为我在那里处理资源(通过资产管理器)。我有退出游戏的按钮,如果以这种方式退出,那很好。麻烦的是可以按下红十字。那么在这种情况下如何正确处理?

在Android版本上,我抓住后退键并以自己的方式处理游戏的不同部分和整个游戏。它工作正常。

我的另一个相关问题:

在桌面上,应用程序无法停止然后处理(在它上面,没有用户显式退出),就像android版本可以(android生命周期),对吗?所以这是一个好主意,如果我暂时保存暂停()并从简历()恢复游戏状态,我不会在桌面上恢复(因为恢复不是完全恢复和如果在桌面上窗口被最小化(我注意到,在最小化/恢复窗口时调用pause()/ resume()),我不希望恢复发生。)

希望这不太清楚:D。我试图谷歌寻求答案,但似乎没有找到任何东西。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:5)

我建议使用libgdx life-cycle methods

要处置你应该使用dispose()方法。你不需要自己打电话!当应用程序被销毁时,它将被自动调用 ,请参阅文档:

  

dispose()在销毁应用程序时调用。之前是对pause()的调用。

所以只需在屏幕中实现dispose方法:

@Override
public void dispose () { 
    //your code needs to get added here, like for example:
    stage.dispose();
    texture.dispose();
    //etc..
}

更新:请注意,AppliacationListener的dispose()会自动调用,而不是Screen的dispose(),请参阅Springrbua的评论

答案 1 :(得分:1)

你可以通过你的游戏类dispose()明确地调用它来调用你屏幕的dispose()

自选画面类:

public class MyScreen implements Screen {
    // Not going to write all other methods that need to be overridden

    @Override
    public void dispose() {
        // Clear you Screen Resources here
    }

}

MyGame课程:

public class MyGame extends Game {
    // Not going to write all other methods that need to be overridden

    @Override
    public void create() {
        setScreen(new MyScreen());

    }

    @Override
    public void dispose() {
        // Clear you Screen Explicitly
        getScreen().dispose();

    }
}

希望这有帮助

答案 2 :(得分:0)

在处理您的应用程序时,请在所有屏幕上调用处理。

答案 3 :(得分:0)

如上所述,Screen接口包含dispose方法。此外,可以覆盖dispose Game方法以自动处理当前屏幕。但是,这不是默认的原因。我们假设您有多个Screen s - Screen1Screen2。 Screen1处于活动状态,然后将屏幕更改为2.然后退出游戏,调用dispose方法,调用当前屏幕的处理方法 - 单独保留屏幕1。

我首选的方法是让游戏通过覆盖setScreen方法并添加Screen []屏幕,boolean [] scrDiss和索引来跟踪设置的屏幕。当在游戏上调用dispose时,它会检查所有屏幕设置,检查先前是否处置,如果没有则进行处理。此外,Screen dispose方法应调用Game上的一个方法,该方法在数组中找到它,并将其标记为已处理。通过这种方式,屏幕可以在游戏结束之前进行处理,但是当游戏处理完毕时,所有屏幕也将同时进行。