Facebook Twitter LinkedIn E-mail
magnify
Home Archive for category "AndEngine"

AndEngine游戏开发教程(1):导言

在介绍Android NDK 开发教程八:Box2D 的Android NDK实现开发时提到AndEngine,AndEngine是一款以OpenGL ES方式进行画面渲染的2D游戏引擎,可以运行在支持Android 1.6及以上版本的系统当中。相对于其它游戏引擎来说,AndEngine拥有更多的游戏组件与扩展功能,也比较容易入门。AndEngine 渲染基于OpenGL,因此有些OpenGL 基本知识对于使用和理解AndEngine很有帮助,OpenGL开发可以参见本博客OpenGL ES 开发教程

在正式介绍AndEngine, 有兴趣的朋友可以先看看 Android坦克大战游戏设计解析 ,了解一下游戏开发的一些基本概念。坦克大战游戏采用的是Java ME中Game API,这是一个非常简单的游戏引擎,只有几个类:

  • Layer类,该类为一抽象类,提供了游戏人物及背景的层次的基本构架,它代表了游戏场景中一个可视化的元素,如游戏人物(Sprite)或是分片背景(TiledLayer).
  • Sprite类,为一个基本动画游戏人物,它可以显示多个动画帧中其中一帧,比如人向前,向后,向左,向右,坦克大战游戏中各种坦克就是一个sprite类对象,它可以显示坦克向四个方向移动的图象,并可很容易实现动态效果,如坦克履带移动的动态效果。它也支持了各种碰撞检测,比如子弹击中坦克,或是打中砖块等等。
  • TiledLayer类,一般用作显示游戏背景,为了能显示范围较大的背景,一般游戏背景地图可以通过小的图片拼接而成。TiledLayer用于实现由一个二维cell (分片地图)组成背景,这个类也提供了动态背景的支持,比如,坦克大战背景中水面的动态效果。
  • LayerManager 类用于管理多个Layer ,sprite,及TiledLayer都是Layer的子类。在坦克大战游戏中,LayerManager用来管理坦克及背景,TiledLayer 及sprites在LayerManager管理下有层次的关系(Z-Order),前面的Layer会遮挡后面的Layer

借助这些简单类可以帮助理解AndEngine中的一些类的主要功能,下图是AndEngine主要类图:

其中:

  • BaseGameActivity 类同Java ME的GameCanvas, 它包含了游戏Engine的实例,并创建OpenGL的surfaceView 用来绘制游戏场景。通常情况下一个GameActivity对于一个游戏Engine实例。
  • Engine类: 主要用来刷新游戏场景Scene,将游戏运行分成离散的时间片,在每个时间片完成游戏的逻辑处理,比如贪吃蛇游戏中蛇前进一步, 通常一个Engine对于与一个Scene对象(SplitScreenEngine可以支持多个)。
  • Scene类: 游戏场景类,主要用来管理游戏中参与的对象和游戏背景,可以在场景添加游戏对象,如蛇,青蛙等,有些类同于坦克游戏解析的的LayerManger的功能。可以将游戏的各个对象分成多个层次,每个层次可以添加不同的游戏对象。如在贪吃蛇在,Scene分成四个层次,一层放蛇,一层放青蛙,一层显示当前得分,还有一层显示背景。Scene也是Entity的子类。
  • Entity类:类同于一般游戏引擎中的Sprite/Layer类,代表一个游戏对象,如坦克,蛇等,支持各种动画效果。 在AndEngine代表可以绘制在场景的基本对象,这个对象也可以是一些基本几何图形。
  • Camera类: OpenGL中ViewPoint,代表一个游戏的可见区域,通常一个场景对应于一个Camera对象,于Camera关联较大的一个类为HUD类,HUD可以简单理解为屏幕上的Overlay,比如可以将软键盘叠加在屏幕上,用于游戏控制。
  • Texture,TextRegion: 主要指游戏中的图像资源。和OpenGL ES Texture概念相同。

AndEngine 也包含了一些扩展库,支持Box2D ,多人联网游戏,SVG渲染,瓦片地图支持等等。但文档不全,好在提供的例子比较丰富。后面就从贪吃蛇例子开始介绍AndEngine开发游戏的基本步骤,然后逐个例子分析,学完所有例子,使用AndEngine开发游戏就没什么问题了。