Android游戏引擎-AndEngine(整理)

本文介绍了AndEngine这款2D游戏引擎,它基于OpenGL ES,适用于Android 1.6及以上版本。与其他引擎如Angle、Rokon、LGame和libgdx相比,AndEngine具有丰富的游戏组件和示例,但文档较少。文章详细阐述了如何获取AndEngine源码、引擎的工作原理,以及关键功能如BaseGameActivity、Engine、Camera、Texture和Scene的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    AndEngine

在介绍AndEngine前,先给大家介绍几款Android游戏引擎:

·      Angle 

 敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。



最低运行环境要求不详。



·      Rokon 

基于OpenGL ES技术开发,物理引擎为Box2D,因此能够实现一些较为复杂的物理效果.此引擎最大的优点在于其开发文档相当之完备,并且项目作者对反馈Bug的修正非常之神速.

但是,堆兼容性问题太多,需要花费相当大的精力去解决。

最低运行环境要求为Android 1.5。



 

·      LGame

LGame是一款国人开发的Java游戏引擎,有Android及PC(J2SE)两个开发版本。其底层绘图器LGrpaphics封装有J2SE以及J2ME提供的全部Graphics API(PC版采用Graphics2D封装,Android版采用Canvas模拟实现),所以能够将J2SE或J2ME开发经验直接套用其中,两版本间主要代码能够相互移植.唯一遗憾的是,该项目作者是个极其懒惰的家伙,开发文档从去年说到今年依旧没有提供,只有游戏示例可供下载。



最低运行环境要求为Android 1.1。



 

·      libgdx

libgdx是一款基于OpenGL ES技术开发的Android游戏引擎,支持Android平台下的2D游戏开发,物理引擎采用Box2D实现。单就性能角度来说,堪称是一款非常强大的 Android游戏引擎,但缺陷在于精灵类等相关组件在使用上不够简化,而且文档也较为匮乏。

最低运行环境要求不详。


 

1.   AndEngine简介

 

          AndEngine是一款以OpenGLES方式进行画面渲染的2D游戏引擎,可以运行在支持Android 1.6及以上版本的系统当中。应该说, AndEngine拥有较多的游戏组件与扩展功能, 它在默认情况下已经可以支持中文,采用屏幕坐标系绘也更符合一般Android绘图习惯。该引擎虽然性能普通,文档缺乏,但示例较为丰富. 所以,您是否选择AndEngine引擎,还是应该从实际出发,多做真机测试才好下决定。

2.      Get theSource Code from GoogleCode

 

如果我们使用的是Eclipse,使用Mercurial插件获取:

 (Help → Software Updates in Eclipse, then install:http://cbes.javaforge.com/update).

 

- Go toFile->Import->Mercurial->Clone Existing Mercurial Repository

 

- In the RepositoryLocation URL box type in: https://code.google.com/p/andengine/

 

- Hit next. It should startcloning the repository...

 

-      Then select the 'default' branch and hit next.

我们在使用源码的时候,我们可以直接link source ,也可以将源码打包成.jar后使用。

 

3.    AndEngine原理

 

         解读AndEngine源码后我们可以发现,AndEngine除了采取低耦合、高内聚的框架策略细分引擎模块,使用OpenGLES进行游戏渲染之外;

         该引擎还以双线程方式分别驱动绘图与事务更新,事实上,它将游戏画面和游戏业务分为两组逻辑,并行跑在同级的互斥线程当中。

         或许是考虑到持续双线程运行电量消耗较大的缘故,AndEngine默认情况下要求用户启动PowerManage进行电源管理,故此需要<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>权限支持,否则初始化时Log会提示缺少相关配置,并建议在AndroidManifest.xml中添加权限。

 

PS:无此权限不影响运行,只会在Log有警告信息,并且耗电较快。

 

3.1 AndEngine的基本运行流程:

 

         由于AndEngine是专供Android使用的2D游戏引擎,所以作为启动类的Activity肯定必不可少,而AndEngine也理所应当的提供给我们这样一个Activity,那就是BaseGameActivity。

一个标准的AndEngine应用,至少应该对BaseGameActivity做继承:

其中四个必须被重载函数的启动顺序如下:

onLoadEngine->onLoadResources->onLoadScene->onLoadComplete

 

         具体的讲,AndEngine会首先加载Engine类实例通知系统游戏引擎的基本运行方式,而后加载游戏资源,其次加载游戏场景实例,最后通过onLoadComplete通知用户加载完毕并于此进行善后工作。

此外,由于BaseGameActivity类重载了父类Activity的onResume与onPause函数以保证其自身的正常运行,所以不建议在继承BaseGameActivity时再次重载上述函数(重载的话不要忘记super调用),推荐直接重载AndEngine提供的onGamePaused和onGameResumed实现同等功能。

 

4.    AndEngine中的常用功能及模块:

 

       由于AndEngine包的下属类较多,并且细分也较为庞杂, 一次性介绍完毕需要相当长的时间,所以 AndEngine的一些核心模块及功能进行一些说明 。

 

4.1        BaseGameActivity

 

        如果我们想正常使用AndEngine,那么当前Activity就必须继承自BaseGameActivity或其子类,否则连初始化Engine也做不到。虽然它还有父类BaseActivity,但BaseActivity只提供了一些异步加载方法而无关AndEngine的主体实现。

 

4.2        Engine

  

       Engine是AndEngine的核心所在,它对AndEngine引擎中Camera、Scene等重要组件进行了统一管理,但必须和BaseGameActivity合作使用,利用EngineOptions类可以对其进行必要的参数配置。

 

public Engine onLoadEngine() { 

        // 构建摄像机 

        this.andCamera = new Camera(0, 0,CAMERA_WIDTH, CAMERA_HEIGHT); 

        // 构建Engine,全屏显示,手机方向为竖屏,按比例拉伸 

        return new Engine(new EngineOptions(true,ScreenOrientation.PORTRAIT, 

                newRatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), 

                this.andCamera)); 

   } 

4.3        Camera

 

        该类即我们常说的游戏摄像机,在AndEngine的Camera有两种作用,一是用以调节屏幕的显示区域,二是利用HUD类实际绘制游戏屏幕于手机之上。


 

4.4       Texture, TextureRegion , TextureRegionFactory,TextureOptions

 

        

Texture:作为承载纹理的实体对象.


TextureRegion:让系统知道如何剪切一个纹理,并返回一个这样的纹理.

 

     TextureRegionFactory:决定纹理的加载路径


TextureOptions:类决定了纹理的渲染方式.

 

mTexture = new Texture (256, 256, TextureOptions.BILINEAR);


ballTtextureTegion = TextureRegionFactory.createFromAsset(this.mTexture, this, "ball.png", 0, 0);//ball.png is 128x128


arrowLeftTextureRegion = TextureRegionFactory.createFromAsset(this.mTexture, this, "arrowleft.png", 0, 129);//120x60


      arrowRightTextureRegion = TextureRegionFactory.createFromAsset(this.mTexture,  this, "arrowright.png", 129, 0);//120x60

 

4.5        Scene

 

        场景容器,能够将某一特定场景作为游戏模块进行调用,我们可以利用它来切换当前游戏的画面与触摸屏监听,切换方法是利用Engine.setScene.


4.6        Sprite

 

       精灵类,是一个大家耳熟能详,并且任何游戏引擎无法回避的关键性组件之一,它常常被用来表示一个游戏中角色或者特定画面要素。

 

4.7   Timer Handler

 

Timer Handler 允许我们的游戏在一个确定的时间后,执行一个特定的动作.当我们注册了Time Handler后,特殊的时间一旦到达,它将会执行一次回调。

this.getEngine().registerUpdateHandler(TimerHandler  spriteTimerHandler           

                  = newTimerHandler(mTimeDelay, new ITimerCallback()

        {                     

          @Override

          public void onTimePassed(final TimerHandler pTimerHandler)

          {

            }

        }));

 

4.8  Update Handler

创建Update Handler,可以在Engine或Scene内登记,以便在AndEngine运行时,进行实时更新!这可以非常的强大,让你运行某些任务,而无需重写onManagedUpdate()函数在一个自定义类的每一个更新。

this.scene.registerUpdateHandler(newIUpdateHandler()

{

      @Override

       public void onUpdate(floatpSecondsElapsed) {

            // TODO Auto-generated methodstub

           //Your code to run here!

        }

}

 

4.9  Sprites/Objects – Listeners

 

private voidcreateSprite()

{

       final Scene scene =this.mEngine.getScene();

      

       final Sprite sprite = new Sprite(100, 100, mYourSpritesTextureRegion)

       {

               @Override

               public boolean onAreaTouched(TouchEventpSceneTouchEvent,

                              float pTouchAreaLocalX, float pTouchAreaLocalY)

               {

                      

               }

       };     

       scene.registerTouchArea(sprite);

       scene.getTopLayer().addEntity(sprite);

}

 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值