Andengine笔记

2020-04-21 03:45

前言:

Andengine学习翻译,

原文:http://www.matim-dev.com/tutorials.html 译者:moonlight

Email: bespbreaker@gmail.com

文中有不少不准确的地方,凑合看吧,希望对初学者有些帮助。

一。开始:

? 1.andengine 介绍:

? Ae 是一个基于OPENGL的开源免费游戏引擎,作者是Nicolas Gramlich。该引擎封装了OPENGL的大多数重要功能,意味着即使你没有OPENGL编程经验,也可以使用该引擎来创建游戏,只要你有JAVA编程经验。 ? 引擎的主要特点:

? 支持不同分辨率设备的缩放。 ? 多点触摸支持

? 物理引擎-BOX2D(愤怒的小鸟也使用该引擎) ? TMX 瓦片地图支持 ? 粒子系统

? 动态壁纸扩展支持 ? 使用AE的好处: ? 免费开源

? 游戏开发中的方方面面都被做好了 ? 不需要OPENGL的经验

? 快速和良好的设计(注:引擎采用高内聚低耦合,模块分得很细) ? 相对来说大而活跃的帮助社区(注:www.andengine.org) ? 不错的引擎扩展(注:8还是9个扩展包) ? 大量的实例,告诉你引擎能做什么

? 不足:

? 几乎没有代码文档 ? 有时候速度比不上其他引擎 ? 缺乏文档是初学者的最大困难

不过实例,社区还有我的(作者的)这个网站也能给初学者极大帮助

? 2.搭建开发环境:

环境的搭建参造RealMayo的视频,里面说得很详细。。。。。。。。。。。。

? 3.重要概念:

本节描述引擎中的重要概念,简单地说就是引擎中最常用到的类和扩展

? 1.ANDENGINE-核心术语(by Nicolas Gramlich + updates and addons)

Engine:

引擎通过时间片来处理游戏,周期性地同步场景的绘制和更新。你也可以使用ENGINE的子类: ? LimitedFPSEngine – 限定的FPS。(注:即固定的帧数,代码中还有一种是

FixStepEngine 即固定步长,文中没有写。意思是每次更新传递的时间都是固定的,即使实际更新场景用的时间超过的了设定的,也会传入固定的时间。) IResolutionPolicy:

IresolutionPolicy 接口实现是EngineOptions的一部分,它告诉引擎如何处理不同设备的不同屏幕尺寸。I.E. RatioResolutionPolicy 在保持比例的情况下会最大化SurfaceView到屏幕的大小。这样屏幕上的东西不会发生变形。 ? RatioResolutionPolicy 保持比例 ? FillResolutionPolicy 填充屏幕,可能被拉伸 Camera:

相机就是定义场景中可显示的部分,通常一个场景有一个相机,Camera 的子类有更多功能:

? BoundCamera- 可以设定场景的边界。 ? ZoomCamera – 可以缩放,定点缩放,滚动场景 Scene:

场景是绘制到屏幕上的所有对象的根容器,一个场景可以包含多层,每层容纳(静态或者动态地)一定数量的实体(Entity)。Scene 有子类:HUD, MenuScene, CameraScene, 这些子类绘制在固定位置和摄相机镜头无关。 ? HUD- Head Up Display. 像游戏中的分数显示。(注:理解成电视频道的台标!) Entity:

实体就是可以被绘制的对象,如,精灵Sprites, 矩形Rectangles, 文字 Text 或 线条Lines等,每个实体都有,位置/旋转/缩放/颜色等等属性。 ? Sprite- 具有纹理(Texture)的实体(Entity) ? TiledSprite- 被切开了的精灵 ? AnimatedSprite- TiledSprite的扩展,可以按指定的时间播放。 Texture:

Texture 就是内存中图像的一个切片。在Android上纹理的宽和高应当是2的幂(但在

ELES2中没有这个要求了,可以很好地减少内存使用。) AE 将许多ITextureSources 源组成一个纹理,可以更合理地使用内存空间。 TextureRegion:

TextureRegion 定义了Texture上的一矩形区域,用来定义精灵要绘制的部分。

?

4.AndEngine 的官方例子:

AE虽然缺乏文档,但是别担心,实例代码可以很好帮你理解引擎如何工作,这是链接:AndEngine Examples GitHub link

?

5. GLES1 和GLES2的比较:

有三个AE的版本,GLES1, GLES2, GLES2 Anchor Center。GLES1已经停止开发。虽然有人说GLES2比GLES1要慢( CLICK HERE)。但是还是强烈建议使用最新版本。

?

6.GLES2 和 GLES2 Anchor Center 的不同:

? 和原生OpenGL的坐标系统一致。

? 和 cocos2d-iphone and cocos2d-x的一致。注:我理解为就是数学上的笛卡尔坐标系 ? 作者更容易更有效写引擎,使用AndEngineCocosBuilderExtension扩展包能读取从

CocosBuilder 导出的格式(COCOS有较多的工具)。 ? 对需要滚屏的游戏更自然。

G2AC 最有意义的改变是坐标系统。原点在左下。原因是:

另外一个变化是锚点(旋转,缩放等的中心)是个从0.0到1.0的相对量。总得来说,这有点像cocos-2d了。这不是什么坏事。

为了更好理解G2AC的坐标系统如何工作,举个例子:

假如上图是一个场景,摄像机宽高为800x480,则:

? 左下角(bottom left corner)为(0,0),左上(top left corner)为(0, 480) ? 左下角(bottom right corner)为(800, 0),右上(top right corner)为(800, 480) ? 场景中有image A, image B, 和 image C 三张图。

? image A 是50X50, 那么它的坐标应当是(25, 25)。

? image B 是200x150 ,要放在屏幕中间,那么它的坐标就是(400,240)

? A 和B都是与场景关联(Attached), C 是与B关联,即在B的(0,0)点。

二。实体无素介绍

? 精灵(Sprites)

如果在2D游戏开发中你还是新手,不知道什么样是精灵,我先简单给Sprite下个定义。 精灵就是放在场景坐标(X,Y)位置的2D位图(Sprite is a 2D Bitmap, positioned on the scene by [X, Y] coordinates.)

在AE中,精灵是Entity扩展,更复杂的精灵类可以让你使用切分和动画。 1.创建精灵。

Sprite 有很多个构造函数,这是其中最简单一个:

Sprite yourSprite = new Sprite(x, y, textureRegion, vertexBufferObjectManager);

? ? ?

第一,二个参数指定精灵的坐标。

第三个参数是精灵的ITextureRegion(见loading resources) 第四个是顶点缓冲对象管理器,很常用,可以通过

mEngine.getVertexBufferObjectManager();获得。

你还可以指定精灵的宽和高,默认使用ITextureRegion中的尺寸。尽可能多地定制Sprite,使用最相近的构造函数。

2. 关联精灵

把精灵关联到其它实体,比如Scene,如下:

anyEntity.attachChild(yourSprite);

3. 更多

? 撤销关联 ? 控制可见性 ? 设置旋转 ? 删除精灵 click.

? 启用抖动显示(注:Dithering是一种欺骗你眼睛,使用有限的色彩让你看到比实际图象更多色彩

的显示方式。通过在相邻像素间随机的加入不同的颜色来修饰图象,通常这种方式被用于颜色较少的情况下)click.

?

Entity 修改器 click.

? 切片和动画精灵 click.

? 切片和动画精灵 (TiledSprite & AnimatedSprite) 本节介绍两个重要的Entity子类,略有不同。 1.TiledSprite:

在做按钮这些时候很有用,方便地创建按钮的不同状态(注:新的AE提供了

ButtonSprite类来专门做按钮了)。你可以很方便地设置当前切片索引: yourTiledSprite.setCurrentTileIndex(index) 2. AnimatedSprite:

是TiledSprite的子类,可以让TiledSprite动起来。 private void createTiledSprite()

{

AnimatedSprite as = new AnimatedSprite(0, 0, tiledTextureRegion, vbo); long[] frameDurration = {100, 100, 100}; as.animate(frameDurration); scene.attachChild(as); }

上面的long[]有三个值因为,我的 tiledTextureRegion 有三个切片,猜对了,需要为每一个切片指定一个值。。。。。。。。。(注:每个切片播放后的延时)

? 如何删除实体(How to remove Entities):

对于不再需要的实体对象我们应当删除,按下面步骤来: ourEntity.detachSelf();

yourEntity.dispose();

? 将Entites作为层:

Layers的概念在游戏开发中很有用,幸运的是,在AE中,创建和管理层都很方便。 为了创建一个新的层,我们只需简单地将一个Entity对象与场景关联,好了!第一层可以使用了!

(注:这点与老版本有点不同,老版本把Layer独立出来了,有类似getTopLayer()函数)

final int FIRST_LAYER = 0; final int SECOND_LAYER = 1;

private void createLayers() {

scene.attachChild(new Entity()); // First Layer scene.attachChild(new Entity()); // Second Layer }

然后 通过:scene.getChildByIndex(FIRST_LAYER).attachChild(yourEntity); 再往第一层里添加东西!


Andengine笔记.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:师德征文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: