原文作者: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屬於事件驅動模型,因爲這也是Android和Javascript的工作模式,它沒有明確的主循環。如果非要扯的話,ApplicationListener.render()
方法也可以考慮看作是主循環方法。
其它參考
LibGDX和Android的生命週期
如果你的目標平臺是Android的話,這篇文章會跟你解釋清楚爲什麼不要使用靜態變量。