Tiger_Dog

Android游戏引擎AndEngine的常用模块介绍

由于AndEngine包的下属类较多,并且细分也较为庞杂,在一篇文章中一次性介绍完毕几乎不可能实现。所以下面开始,小弟会就AndEngine的一些核心模块进行简明扼要的说明,但如果前文做过说明的下文会一笔带过。

PS:事实上,就连AndEngine作者也不可能做到详细介绍,毕竟到目前为止AndEngine压根没有出过文档。(连andengineexamples下的示例代码都已经和最新的AndEngine源码脱离了……)

1、关于Engine: 

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

2、关于BaseGameActivity:
 


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

3、关于IResolutionPolicy:
 


IResolutionPolicy 是一个接口类,其中只规定了onMeasure函数的实现格式。事实上,AndEngine中所有该类具体实现的作用与标准View中的 onMeasure函数几乎一致,也会被标准View中的onMeasure函数重载调用(具体调用在AndEngine的 RenderSurfaceView类当中)。而且除BaseResolutionPolicy外,所有AndEngine的 IResolutionPolicy实现也都调用了View的setMeasuredDimensionProxy函数。

在 AndEngine的org.anddev.andengine.engine.options.resolutionpolicy包下有一组 IResolutionPolicy接口的具体实现,分别为BaseResolutionPolicy(除了会校验一下屏幕大小外,什么也不做)、 FillResolutionPolicy(拉伸游戏画面为全屏填充,视摄像机大小不同,会有不同程度变形)、 FixedResolutionPolicy(强行规定游戏画面为固定大小,此设置不会自动适应屏幕大 小),RatioResolutionPolicy(按比例修正画面大小,以适应屏幕大小),RelativeResolutionPolicy(根据构 建RelativeResolutionPolicy时的缩放参数,缩放游戏屏幕为指定比例)。

最后,所有IResolutionPolicy的实现类,都要随着EngineOptions于初试化时传递给Engine实例才起作用。

4、关于Camera:
 


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

5、关于Scene:
 


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

6、关于Entity:
 


Entity 是IEntity接口的具体实现,也是AndEngine中无论Scene、Layer、Sprite(这个继承关系比较远,中间隔了 BaseRectangle、RectangularShape、GLShape、Shape等上级类,不过追溯源头始终继承自Entity)的统一父 类,通过Entity我们可以让AndEngine中场景,或场景中某精灵实现统一效果的缩放、旋转、变色等操作。

7、关于Texture:
 


Texture 是AndEngine所提供的纹理用类,但Texture本身(在AndEngine中)并没有提供加载图片的方法,必须通过 TextureRegionFactory类(更准确的说,依赖它内部封装的TextureRegion、BuildableTexture等类)与之合 作才可以加载纹理。除此之外,AndEngine要求所加载纹理(图片)大小必须为2的整数次幂。

8、关于TextureRegion:
 


TextureRegion 的父类是抽象类BaseTextureRegion,主要功能也被封装在BaseTextureRegion类当中,AndEngine提供了 TextureRegionFactory这个工厂类用以简化构建TextureRegion的流程。单就TextureRegion来讲,它的作用似乎 就是让系统知道如何剪切一个纹理,并返回一个这样的纹理给你。

然而,事实上AndEngine中只有TextureRegion才更接近 于通常意义上的Texture。或者说,只有TextureRegion + Texture时,我们才能较为完整的使用AndEngine纹理功能。严肃的讲,AndEngine中的Texture有很多功能必须靠 TextureRegion最终完成,比如AndEngine中的Sprite必须加载TextureRegion才能使用Texture,而不是直接调 用Texture,TMXTiledMap中读取指定瓦片返回的也是TextureRegion,而非直接的Texture(进行画面渲染时 AndEngine内部会调用TextureRegion中的Texture引用,但也只允许如此调用);应该说,AndEngine中见Texture 几乎必见TextureRegion,二者无法分离,缺一不可。

9、关于TextureOptions
 


在AndEngine中,TextureRegionFactory类决定纹理的加载路径,Texture类作为承载纹理的实体对象,而TextureOptions类决定了纹理的渲染方式。

也即是说,OpenGLES将以何种方式显示纹理图像,都由TextureOptions类所决定。在当前最新版本的AndEngine中,默认提供了:

1、NEAREST(Nearest滤波,实现上依赖GL_NEAREST做不光滑过滤,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度快画质差)

2、BILINEAR(双线性插值,实现上依赖GL_LINEAR做线性滤波,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度慢画质佳)

3、REPEATING(与NEAREST同为Nearest滤波,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度较快画质差)

4、REPEATING_BILINEAR(与BILINEAR同为双线性插值,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度很慢画质佳(低端机跑此模式异常悲剧,高端机尚可))

5、NEAREST_PREMULTIPLYALPHA(所有[PREMULTIPLYALPHA]结尾的TextureOptions与其它同名类差别仅在于是否支持根据Alpha值设置透明纹理,以下同)

6、BILINEAR_PREMULTIPLYALPHA

7、REPEATING_PREMULTIPLYALPHA

8、REPEATING_BILINEAR_PREMULTIPLYALPHA等静态对象。

以上TextureOptions实例都可以通过“TextureOptions.XXXXXX”的方式进行引用并设置给Texture。事实上,除了AndEngine提供的Texture渲染模式,我们也可以按照规则自行构建需要的TextureOptions。

比如构建一个混插的TextureOptions:
 

new TextureOptions(GL10.GL_LINEAR_MIPMAP_LINEAR, GL10.GL_LINEAR_MIPMAP_NEAREST, GL10.GL_REPEAT, GL10.GL_REPEAT, GL10.GL_MODULATE, true);
 

另外,TextureOptions默认还有DEFAULT模式,不 过该模式实际引用为NEAREST_PREMULTIPLYALPHA,也就是纹理低画质但支持Alpha。如果您想要兼容低端机,则建议不要使用含有 【BILINEAR】字样的AndEngine加载大图,而应直接使用TextureOptions.DEFAULT或 TextureOptions.NEAREST_PREMULTIPLYALPHA;因为BILINEAR模式对硬件要求较高,如果以此模式将较大纹理放 到低端机上渲染,速度很可能无法保证。但是,假如您的游戏只针对高端机用户便无需介怀了。



posted on 2011-04-21 14:58  Tiger_Dog  阅读(1222)  评论(0编辑  收藏  举报

导航