我使用libgdx(com.badlogic.gdx.Game和Screens以及那些东西)制作游戏。我有以下问题:在桌面上,当我关闭窗口(从顶部的十字架),当然应用程序关闭。但我想回到菜单屏幕并在那里处置,因为我在那里处理资源(通过资产管理器)。我有退出游戏的按钮,如果以这种方式退出,那很好。麻烦的是可以按下红十字。那么在这种情况下如何正确处理?
在Android版本上,我抓住后退键并以自己的方式处理游戏的不同部分和整个游戏。它工作正常。
我的另一个相关问题:
在桌面上,应用程序无法停止然后处理(在它上面,没有用户显式退出),就像android版本可以(android生命周期),对吗?所以这是一个好主意,如果我暂时保存暂停()并从简历()恢复游戏状态,我不会在桌面上恢复(因为恢复不是完全恢复和如果在桌面上窗口被最小化(我注意到,在最小化/恢复窗口时调用pause()/ resume()),我不希望恢复发生。)
希望这不太清楚:D。我试图谷歌寻求答案,但似乎没有找到任何东西。非常感谢任何帮助。
答案 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 - Screen1
和Screen2
。 Screen1处于活动状态,然后将屏幕更改为2.然后退出游戏,调用dispose方法,调用当前屏幕的处理方法 - 单独保留屏幕1。
我首选的方法是让游戏通过覆盖setScreen方法并添加Screen []屏幕,boolean [] scrDiss和索引来跟踪设置的屏幕。当在游戏上调用dispose时,它会检查所有屏幕设置,检查先前是否处置,如果没有则进行处理。此外,Screen dispose方法应调用Game上的一个方法,该方法在数组中找到它,并将其标记为已处理。通过这种方式,屏幕可以在游戏结束之前进行处理,但是当游戏处理完毕时,所有屏幕也将同时进行。