libgdx离开屏幕和屏幕生命周期

3

以下命令:

game.setScreen(new GameScreen());

启动您进入一个新的屏幕,类似于Android的startActivity()

但是,如何离开该屏幕并返回调用您的屏幕(类似于Android的finish())?

此外,是否有类似于Android的LibGDX屏幕生命周期的图形展示?

1个回答

9

屏幕生命周期其实与Android的生命周期非常相似,因为这就是设计libgdx时需要考虑的。基本上,Android生命周期回调事件只是转发到LibGDX的ApplicationListener,然后再转发到你的Game,最后转发到你的Screen

该生命周期通常如下所示(使用Screen术语):

           __________________________________
           |         ____       ____        |
           V         V   |      V  |        |
show --> resume --> resize <-- render --> pause --> hide --> dispose
           |          |          ^          ^
           |__________|__________|__________|

您可以发现,show()hide()通常只会被调用一次。当您的Screen被设置为当前屏幕时,show()将在开始时被调用,而hide()将在您更改屏幕时被调用。请注意,dispose()不会自动调用,因此您应该确保在切换屏幕时调用它,或在您的hide()方法中调用它。 resume()pause()可以被多次调用,但至少一次。切换到另一个应用程序或主屏幕将导致一个额外的pause -> resume循环。 render()resize()通常会被频繁调用,但不一定按任何特定顺序。在桌面上调整窗口大小可能会导致多次连续调用resize(),而没有任何render()调用。但是当然也可能完全跳过resize()
如果您想切换回之前已经可见的屏幕,则需要给第二个屏幕引用第一个屏幕,以便将其再次设置为当前屏幕。但这也会导致整个生命周期重新开始。
另一个选项是将第二个屏幕保留为第一个屏幕的属性,并通过调用screen2.show(); screen2.resume();自己“模拟”屏幕切换,然后在第一个屏幕中将所有事件转发到第二个屏幕。

1
谢谢。只是为了明确,当你调用setScreen()时,show()也会被调用对吗? - NewDev
@NewDev 是的,没错。 - noone
你如何调用dispose()方法?我在调用它时遇到了崩溃的问题。我将setScreen()设置回闪屏界面,然后检测是否刚从游戏界面返回,再调用游戏界面的dispose()方法,结果触发了一个错误。再次感谢。 - NewDev
@NewDev 抱歉,我不明白。请打开一个新问题并添加必要的代码。 - noone
完成,http://stackoverflow.com/questions/21068345/exit-screen-causing-java-native-memory-to-grow - NewDev
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接