歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> AndEngine游戲引擎之【生命周期】

AndEngine游戲引擎之【生命周期】

日期:2017/3/1 9:56:00   编辑:Linux編程

本篇了解AndEngine和一般游戲編程的一些最必要的組成部分,一些將有助於我們快速而高效地創建各種游戲基礎的類。重要的是要了解游戲初始化時的操作順序。一個游戲的基本需求,包括創建引擎,加載游戲的資源,並建立初始屏幕和設置,這是創造一個AndEngine游戲的基礎。但是,如果我們需要游戲具有更多的多樣性,這就需要了解AndEngine的整個生命周期。

AndEngine生命周期包括了一些方法,我們繼承實現(BaseGameActivity)SimpleBaseGameActivity我們可以清晰的看到幾個重寫的方法:這些方法按以下順序執行:

1. 定義 onCreateEngineOptions() 方法 :

public EngineOptions onCreateEngineOptions() {
// Define our mCamera object
mCamera = new Camera(0, 0, WIDTH, HEIGHT);
//聲明和定義引擎對象
EngineOptions engineOptions = new EngineOptions(true,
ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(),
mCamera);
//這個操作是很有必要的
//激活鎖定選項關閉屏幕
//如果游戲處於閒置狀態,則關閉屏幕
engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
//返回的engineOptions對象
return engineOptions;
}

2. 定義 onCreateResources()

public void onCreateResources(
OnCreateResourcesCallback pOnCreateResourcesCallback) {
pOnCreateResourcesCallback.onCreateResourcesFinished();
}

3. 定義onCreateScene()

public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) {
// Create the Scene object
mScene = new Scene();
//通知回調函數,我們完成創建了scene對象,並返回
// mScene to the mEngine object (自動處理)
pOnCreateSceneCallback.onCreateSceneFinished(mScene);
}

4. 定義onPopulateScene()

@Override
public void onPopulateScene(Scene pScene,
OnPopulateSceneCallback pOnPopulateSceneCallback) {
// onPopulateSceneFinished(),類似於the resource and scene的回調
//一旦我們完成填充場景,就會被執行。
pOnPopulateSceneCallback.onPopulateSceneFinished();
}

工作流程:

這些代碼是所有AndEngine游戲的基礎。我們已經創建了一個主要的activity類,作為應用程序的入口點。該activity包含四個主要的AndEngine活動的生命周期方法。我們在這些方法中開始創建EngineOptions選項,創建資源,創建場景,並設計場景。

第一步,我們重寫引擎的onCreateEngineOptions()方法。在此方法中,我們的主要重點是我們的Camera對象,以及我們的EngineOptions對象實例化。這兩個對象的構造函數允許我們定義我們的應用程序的顯示屬性。此外,我們通過調用engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON)方法來處理程序閒置時候的狀態。

第二步,我們將繼續重寫onCreateResources()方法,我們可以在這個方法中創建和設置所需的游戲資源。這些資源可能包括紋理,聲音和音樂,和字體。在onCreateResources()方法的最後,我們必須調用pOnCreateResourcesCallback.onCreateResourcesFinished()方法。

第三步,涉及到Scene對象的實例化和設置。設置場景可以很簡單,也可以更復雜,它可能包括設置觸摸事件監聽器,更新處理程序,等等。一旦我們完成設定場景,我們必須調用pOnCreateSceneCallback.onCreateSceneFinished(mScene)方法。

第四步,重寫onPopulateScene()方法。這種方法是在專門用於連接子實體的場景。與前兩個步驟一樣,在最後我們必須調用pOnPopulateSceneCallback.onPopulateSceneFinished()方法。

在下面的列表中,我們將介紹生命周期方法從一個activity的開始直到結束。

生命周期的順序如下:

onCreate : 這種方法是在Android SDK的原生應用程序的入口點。在AndEngine中,此方法只調用BaseGameActivity類中的onCreateEngineOptions()方法,然後返回選項到游戲引擎。

onResume: 這是另一款Android SDK的本地方法。在這裡,我們只是從EngineOptions對象中獲取鎖定設置,並繼續為RenderSurfaceView對象調用onResume()方法。

onSurfaceCreated: 在activity第一次啟動的過程中此方法將調用onCreateGame()方法,或注冊一個布爾變量作為真正的資源重新加載,如果此前這個活動已經被部署。

onReloadResources: 此方法將重新加載游戲資源,如果我們的應用程序從最小化成為用戶的焦點。應用程序初始化時這個方法不會被調用。

onCreateGame: 這裡會處理AndEngine生命周期接下來三個回調函數的執行的順序。

onCreateResources: 這種方法讓我們創建游戲初始化時所需要的資源。這些資源包括紋理,聲音和音樂,和字體等。

onCreateScene: 在這裡,我們處理游戲場景對象的初始化。在這個方法中可能會進行實體填充場景的操作,但是,這種操作通常最好在onPopulateScene()中執行。

onPopulateScene: 在生命周期的onPopuplateScene()方法中,我們只是完成了場景,但這些只是生命周期回調函數中的一小部分。當我們的應用程序第一次啟動時,這個方法應該可以用來定義場景的視覺效果。請注意,在這一步中場景已經被創建並應用到引擎中。在某些情況下是可以看到實體填充場景,如果沒有加載屏幕或閃屏,並且如果有大量的實體連接。

onGameCreated: 這意味著onCreateGame()序列執行完成,如果有必要的話可以重新加載資源,否則什麼都不做。是否重新加載資源這取決於onSurfaceCreated方法返回的布爾變量。

onSurfaceChanged: 當游戲的取向發生變化時,會調用這個方法。從風景到人像模式,反之亦然。

onResumeGame: 當activity循環啟動時,會調用這個方法。如果我們的activity在這步中沒有任何問題,引擎將調用start(),激活游戲的更新線程。

游戲最小化或終止時候的生命周期,如下:

onPause: 當activity最小化或終止的時候,會第一個調用這個方法。這是原生的Android暫停方法,它調用RenderSurfaceView對象的暫停方法,並在游戲引擎上恢復喚醒鎖的方法。

onPauseGame: 接下來,onPause()的AndEngine實現方法只是簡單地調用stop()方法,造成引擎的更新處理程序停止工作。

onDestroy: 在onDestroy()方法中,AndEngine清除引擎的管理類ArrayList對象內包含的所有圖形資源。這些管理者包含在VertexBufferObjectManager類,FontManager類中,ShaderProgramManager類,最後是TextureManager類。

onDestroyResources: 該方法的名稱可能會有點誤導,因為我們已經卸載了大部分的資源在onDestroy()。這個方法釋放了所有聲音和音樂的對象,通過調用他們管理者的releaseAll()方法。

onGameDestroyed: 最後,我們需要調用AndEngine完整的生命周期中的最後一個方法。這個方法中不會有一大堆的方法,AndEngine只是設置一個mGameCreated的布爾變量為false,規定此activity不再運行。

在下面的圖片中,我們可以看到完整的生命周期,當游戲被創建,最小化或銷毀:

由於AndEngine生命周期的異步性質,其中的某些方法可能會多次執行。

Copyright © Linux教程網 All Rights Reserved