AndEngine為我們提供瞭在Android中使用其引擎方便的接口!
眾所周知,幾乎每一個Android的應用和遊戲都會有Activity(當然隻有某些Service或者Reciver之類的除外。。。),而作為遊戲,Activity更是必不可少的,原因很簡單,遊戲需要與用戶交互,遊戲需要呈現出畫面,這些,都需要Activity的支持。。。
再看AndEngine的包結構,在/ui/activity/中,我們會發現BaseActivity,BaseGameActivity,SimpleBaseGameActivity。。。
這些就是AndEngine中為我們做好的Activity的封裝,其中繼承關系是
BaseActivity -> BaseGameActivity -> SimpleBaseGameActivity
當然,從BaseGameActivity中繼承的子類不止SimpleBaseGameActivity!在看AndEngineExamples(官方為我們提供的例子),我們會發現,幾乎所有的例子都是繼承於SimpleBaseGameActivity的。
在BaseActivity中,隻是定義瞭一些異步加載資源的方法,並沒有做關於和引擎相關的處理。
所以,再看BaseGameActivity,粗讀源碼發現,BaseGameActivity是在Android中使用AndEngine的最基本的類!其中有兩個很重要的點,一是Engine(引擎),二是Render(渲染),這是最重要的一部分,我們分開來看!
Engine的構造:
當然是在Activity的生命周期方法的onCreate()中,也就是說我們在繼承BaseGameActivity或者其子類的時候,不論我們重寫或者不重寫其onCreate(),ps:重寫的話調用super.onCreate(),都會調用BaseGameActivity的onCreate()方法,這也就為我們提供瞭構造Engine的機制。至於Engine的構造
[java] this.mEngine = this.onCreateEngine(this.mEngineOptions);
this.mEngine = this.onCreateEngine(this.mEngineOptions);通過調用onCreateEngine(),如果大傢試著使用AndEngine寫過一些小Demo的話就會很清楚的知道,繼承於BaseGameActivity或者其子類,都必須實現3個方法,onCreateEngine()就是其中的一個(當然也可能是onCreateEngineOptions(),如果我們使用默認的Engine引擎而不是其它的引擎的話,我們之需要配置引擎的參數即可)。
Render的使用:
其中另一個重要的部分就是遊戲的繪制瞭!AndEngine是使用OpenGL來做的,所以就需要調用Android中的OpenGL部分,而Android中OpenGL的基本用法是:
1.構造一個實現於GLSurfaceView的類,需要有一個自定義的Render類(見2),用於填充到Activity(通過setContentView()方法,ps:GLSurfaceView也是View的子類)
2.自定義一個實現於GLSurfaceView.Render的類,為我們提供渲染的操作
看源碼BaseGameActivity中的onCreate()方法的最後一行
[java] this.onSetContentView();
this.onSetContentView();再看一下onSetContentView()的實現
[java] protected void onSetContentView()
{
this.mRenderSurfaceView = new RenderSurfaceView(this);
this.mRenderSurfaceView.setRenderer(this.mEngine, this);
this.setContentView(this.mRenderSurfaceView, BaseGameActivity.createSurfaceViewLayoutParams());
}
protected void onSetContentView()
{
this.mRenderSurfaceView = new RenderSurfaceView(this);
this.mRenderSurfaceView.setRenderer(this.mEngine, this);
this.setContentView(this.mRenderSurfaceView, BaseGameActivity.createSurfaceViewLayoutParams());
}哈哈,和我們的分析是一樣的!
分析完瞭BaseGameActivity中最重要的兩個部分,大傢就會明白瞭,為什麼我們隻需要繼承於BaseGameActivity或其子類,就可以使用Engine和繪制瞭吧!
好瞭,今天就總結到這兒吧!後續會再豐富一下引擎的更新和繪制的原理的!
各位看官早安,歡迎拍磚!(你的拍磚,才是我深入的切入點!謝謝!)
摘自 oneRain88的專欄