AndEngine学习(三):AndEngine与Android的粘合点

来源:互联网 发布:4g网络制式有哪些 编辑:程序博客网 时间:2024/06/04 20:05
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和绘制了吧!

 


好了,今天就总结到这儿吧!后续会再丰富一下引擎的更新和绘制的原理的!

各位看官早安,欢迎拍砖!(你的拍砖,才是我深入的切入点!谢谢!)

原创粉丝点击