以下命令:
game.setScreen(new GameScreen());
启动您进入新屏幕,类似于Android的startActivity()
。
但是,你如何离开屏幕并返回呼叫你的屏幕(类似于Android的finish()
)?
另外,是否有图片显示LibGDX
与Android相似的屏幕生命周期?
答案 0 :(得分:8)
屏幕生命周期实际上与Android的生命周期基本相同,因为这是他们在设计libgdx时必须涵盖的内容。基本上,Android生命周期回调事件只会转发给LibGDX的ApplicationListener
,后者会将其转发给Game
,Screen
会将其转发到Screen
。
生命周期通常如下(使用 __________________________________
| ____ ____ |
V V | V | |
show --> resume --> resize <-- render --> pause --> hide --> dispose
| | ^ ^
|__________|__________|__________|
术语):
show()
您可以看到show和hide通常只调用一次。 Screen
将在开头调用,当您将hide()
设置为当前值时,将在您更改屏幕时调用dispose()
。请注意,hide()
未自动加入,因此您应确保在切换屏幕时调用它,或使用resume()
方法调用它。
pause()
和pause -> resume
可以多次调用,但至少调用一次。切换到另一个应用或主屏幕将导致另外一个render()
周期。
resize()
和resize()
通常被称为很多,但在任何特定顺序中都不是必需的。在桌面上调整窗口大小可能会导致连续多次调用render()
,而不会在其间进行任何resize()
调用。但当然screen2.show(); screen2.resume();
也可以完全跳过。
如果要切换回之前已经可见的屏幕,则需要为第二个屏幕指定第一个屏幕,因此可以再次将其设置为当前屏幕。但这也会从一开始就引起整个生命周期。
另一种选择是将第二个屏幕保留为第一个屏幕的属性并自己“模拟”屏幕开关,通过自己调用{{1}},然后将所有事件转发到第一个屏幕中的第二个屏幕