libGDX的生命週期

原文作者:libGDX
原文地址:https://github.com/libgdx/libgdx/wiki/The-life-cycle
譯文作者:Jianan - [email protected]
版本信息:本文基於2018-07-01版本翻譯
譯文版權:CC BY-NC-ND 4.0,允許複製轉載,但必須保留譯文作者署名及譯文鏈接,不得演繹和用於商業用途。


libGDX應用程序具有明確定義的生命週期,用於處理應用程序的不同的狀態,例如應用程序的創建、暫停、恢復、渲染和(銷燬)釋放等等。


ApplicationListener


應用程序的開發者通過實現ApplicationListener接口來接管libGDX應用程序的生命週期事件。ApplicationListener的實例需要傳遞給底層平臺的Application實例(參考libGDX的應用框架)。之後,每當有應用程序級別的生命週期事件發生時,Application都會回調ApplicationListener。一個簡單的ApplicationListener空實現大致如下:

public class MyGame implements ApplicationListener {
   public void create () {
   }

   public void render () {        
   }

   public void resize (int width, int height) { 
   }

   public void pause () { 
   }

   public void resume () {
   }

   public void dispose () { 
   }
}

如果不需要關注所有的生命週期事件,也可以選擇繼承ApplicationAdapter類,然後有選擇的重寫需要的生命週期方法。

一旦ApplicationListener被傳遞到Application,它的方法將會在以下情況被回調:

方法簽名 描述
create () 創建應用程序的時候會被回調,它只會被回調一次。
resize(int width, int height) 只要遊戲不在Pause停止生命週期狀態下,每次遊戲的屏幕窗口尺寸發生變化都會回調這個方法。另外,create()方法被回調之後,它也會被回調一次。
這個方法的參數是屏幕變化之後新的屏幕寬高,單位是像素。
render () 每次應用程序循環遊戲的渲染過程都會執行這個方法。遊戲的刷新邏輯通常也會放在這個方法裏面執行。
pause () 在Android平臺上,當按了Home鍵或者有電話撥入等情況時,這個方法都會被回調。如果是在桌面平臺上,只有在退出應用程序時,它會在dispose()被回調之前執行一次。
如果要保存遊戲的狀態,這個方法是個很合適的地方。
resume () 這個方法只會在Android平臺上被調用,它只會在應用程序從Pause停止狀態恢復運行的時候被調用。
dispose () 當應用程序被銷燬的時候會調用這個方法。在它被調用之前會先回調pause()方法。

下面的圖可以直觀的看出整個生命週期:

libGDX生命週期


主循環在哪裏?


Libgdx屬於事件驅動模型,因爲這也是Android和Javascript的工作模式,它沒有明確的主循環。如果非要扯的話,ApplicationListener.render()方法也可以考慮看作是主循環方法。


其它參考


LibGDX和Android的生命週期
如果你的目標平臺是Android的話,這篇文章會跟你解釋清楚爲什麼不要使用靜態變量。


上一章|libGDX的應用框架
下一章|模塊概覽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章