2014-01-11 156 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