2014-01-11 124 views
3

以下命令:libgdx离开屏幕和屏幕周期

game.setScreen(new GameScreen()); 

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

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

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

回答

8

屏幕生命周期实际上与Android的生命周期几乎相同,因为这正是设计libgdx时必须包含的内容。基本上,Android生命周期回调事件仅转发给LibGDX的ApplicationListener,后者又将其转发给您的Game,然后将其转发给您的Screen

生命周期通常是这样的(使用Screen术语):

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

你可以看到,显示和隐藏通常只调用一次。 show()将在开始时被调用,当您的Screen被设置为当前值时,当您更改屏幕时将调用hide()。请注意,dispose()没有自动调整,所以您应该确保在切换屏幕时调用它,或者在hide()方法中调用它。

resume()pause()可以多次调用,但至少一次。切换到其他应用程序或主屏幕将导致再次出现pause -> resume循环。

render()resize()通常被称为很多,但没有任何特定顺序的必要。在桌面上调整窗口大小会导致连续拨打resize(),而不需要拨打任何render()。但当然resize()也可以完全跳过。

如果你想切换回原已可见之前,那么你需要给第二个屏幕的第一个参考的屏幕,因此它可以被重新设置为当前屏幕。但那也将从一开始就导致整个生命周期。

另一种选择是将第二个屏幕保留为第一个屏幕的属性,通过自己调用screen2.show(); screen2.resume();自己“模拟”屏幕切换,然后将所有事件转发到第一个屏幕中的第二个屏幕。

+1

谢谢只是为了清楚show()被称为她,你做setScreen()的权利? – NewDev

+0

@NewDev是的,正好。 – noone

+0

你如何调用dispose()我打电话时发生崩溃?我setScreen()返回到闪屏,然后检测是否我刚刚从游戏屏幕返回,()我再次触发一组故障感谢 – NewDev