AndEngine學習(三):AndEngine與Android的粘合點

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的專欄

發佈留言