AndEngine游戏引擎讲解AndEngine是一款以OpenGL ES方式进行画面渲染的2D游戏引擎,可以运行在支持Android1.6及以上版本的系统当中。
它在默认情况下已经可以支持中文,采用屏幕坐标系绘也更符合一般Android绘图习惯。
AndEngine引擎基础构成如下图所示:如何使用AndEngineAndEngine的基本运行原理解读AndEngine源码后我们可以发现,AndEngine除了采取低耦合、高内聚的框架策略细分引擎模块,使用OpenGLES进行游戏渲染之外;该引擎还以双线程方式具体地说,其绘图线程位于AndEngine提供的GLSurfaceView内部类GLThread(在AndEngine的org.anddev.andengine.opengl.view包下,非Android默认的 当AndEngine进行游戏绘图时,游戏业务线程会通过wait方式锁定,而当游戏业务处理时,也会以同样的手段锁定绘图线程,二者间具体交互关系由Engine类另外,或许是考虑到持续双线程运行电量消耗较大的缘故,AndEngine默认情况下要求用户启动PowerManager进行电源管理,故此需要<uses-permission android:name="android.permission.WAKE_LOCK"/>权限支持,否则初始化时Log会提示缺少相关配置,并建议你在AndroidManifest.xml中添加权限。
PS:无AndEngine的基本运行流程由于AndEngine是专供Android使用的2D游戏引擎,所以作为启动类的Activity肯定必不可少,而AndEngine也理所应当的提供给我们这样一个Activity,那就是 一个标准的AndEngine应用,至少应该对BaseGameActivity做如下继承:其中四个必须被重载函数的启动顺序如下:onLoadEngine->onLoadResources->onLoadScene->onLoadComplete具体的讲,AndEngine会首先加载Engine类实例通知系统游戏引擎的基本运行方式,而后加载游戏资源,其次加载游戏场景实例,最后通过onLoadComplete通此外,由于BaseGameActivity类重载了父类Activity的onResume与onPause函数以保证其自身的正常运行,所以不建议在继承BaseGameActivity时再次重载上AndEngine的基本运行方式上文介绍了AndEngine的基本运行机制与运行流程,然而仅仅这样AndEngine还是无法实际运行,因为Engine与Scene都没有获得具体实现。
假如我们想要在运行效果如下图所示:另外,事实上BaseGameActivity并非AndEngine提供的唯一Activity,其UI包下尚有以SplashScene场景作为特效启动的BaseSplashActivity类,以及通过重如何使用AndEngine事实上,AndEngine中组件颗粒都非常细小,几乎每个由AndEngine提供的功能都会有一个对应的类存在。
比如仅Engine就衍生出DoubleSceneSplitScreenEngine(可以同时显示并缓存两个Scene的Engine,通过setFirstScene以及setSecondScene进行双屏切换,即AndEngine的IUpdateHandler接口IUpdateHandler类是AndEngine引擎中使用频率非常之高的组件之一,其本身是一个接口,内部有onUpdate以及reset两个函数等待实现,几乎所有AndEngine 具体的讲,所有通过AndEngine中registerUpdateHandler函数注册的IUpdateHandler,都会被保存到一个叫做UpdateHandlerList的IUpdateHandler接口 另外,与UpdateHandlerList集合类作用类似的还有RunnableHandler类,该类同样是IUpdateHandler的具体实现,它的作用在于保存并执行一次标准Run AndEngine的Async方法默认情况下,AndEngine的资源加载会在构建Engine之后,调用onLoadResources函数时进行同步加载。
但如果一次性加载资源太多时,便可能会面临一个 具体的讲,AndEngine对Android系统自带的AsyncTask类进行了适当封装(具体封装在BaseActivity类中,该类为BaseGameActivity的父类,AndEngine运行效果如下图所示:AndEngine中的精灵调用精灵类,是一个大家耳熟能详,并且任何游戏引擎无法回避的关键性组件之一,它常常被用来表示一个游戏中角色或者特定画面要素。
如此重要的存在,AndAndEngine的精灵动画在绝大多数的游戏开发中,仅仅有精灵类存在是并不足够的,我们往往还需要让精灵作出绚丽的效果以吸引用户眼球,而这些效果在AndEngine中,统一通过1. 2. 3. 4. 5. 6. 7. 8.运行效果如下图所示:AndEngine的常用模块介绍关于Engine:Engine是AndEngine的核心所在,它对AndEngine引擎中Camera、Scene等重要组件进行了统一管理,但必须和BaseGameActivity合作使用,利用关于BaseGameActivity:如果你想正常使用AndEngine,那么当前Activity就必须继承自BaseGameActivity或其子类,否则你连初始化Engine也做不到。
虽然它还有父类BaseAc关于IResolutionPolicy:IResolutionPolicy是一个接口类,其中只规定了onMeasure函数的实现格式。
事实上,AndEngine中所有该类具体实现的作用与标准View中的onM在AndEngine的org.anddev.andengine.engine.options.resolutionpolicy包下有一组IResolutionPolicy接口的具体实现,分别为BaseResolutionPolic 最后,所有IResolutionPolicy的实现类,都要随着EngineOptions于初试化时传递给Engine实例才起作用。
关于Camera:该类即我们常说的游戏摄像机,在AndEngine的Camera有两种作用,一是用以调节屏幕的显示区域,二是利用HUD类实际绘制游戏屏幕于手机之上。
关于Scene:场景容器,作用类似于LGame中的Screen,能够将某一特定场景作为游戏模块进行调用,我们可以利用它来切换当前游戏的画面与触摸屏监听,切换方法关于Entity:Entity是IEntity接口的具体实现,也是AndEngine中无论Scene、Layer、Sprite(这个继承关系比较远,中间隔了BaseRectangle、RectangularShape、关于Texture:Texture是AndEngine所提供的纹理用类,但Texture本身(在AndEngine中)并没有提供加载图片的方法,必须通过TextureRegionFactory类(更准确关于TextureRegion:9. a. b. c. d. e. f. g. h.TextureRegion的父类是抽象类BaseTextureRegion,主要功能也被封装在BaseTextureRegion类当中,AndEngine提供了TextureRegionFactory这个 然而,事实上AndEngine中只有TextureRegion才更接近于通常意义上的Texture。
或者说,只有TextureRegion +Texture时,我们才能较为完整的使用AndEngine纹理功能。
严肃的讲,AndEngine中的Texture有很多功能必须靠TextureRegion最终完成,比如AndE关于TextureOptions:在AndEngine中,TextureRegionFactory类决定纹理的加载路径,Texture类作为承载纹理的实体对象,而TextureOptions类决定了纹理的渲染方式。
也就是说,OpenGLES将以何种方式显示纹理图像,都由TextureOptions类所决定。
在当前最新版本的AndEngine中,默认提供了:NEAREST(Nearest滤波,实现上依赖GL_NEAREST做不光滑过滤,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度快画质差)BILINEAR (双线性插值,实现上依赖GL_LINEAR做线性滤波,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度慢画质佳)REPEATING(与NEAREST同为Nearest滤波,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度较快画质差)REPEATING_BILINEAR(与BILINEAR同为双线性插值,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度很慢画质佳(低端机跑此模式异常悲剧NEAREST_PREMULTIPLYALPHA(所有[PREMULTIPLYALPHA]结尾的TextureOptions与其它同名类差别仅在于是否支持根据Alpha值设置透明纹理,以下同)BILINEAR_PREMULTIPLYALPHAREPEATING_PREMULTIPLYALPHAREPEATING_BILINEAR_PREMULTIPLYALPHA 等静态对象以上TextureOptions实例都可以通过“TextureOptions.XXXXXX”的方式进行引用并设置给Texture。
事实上,除了AndEngine提供的Texture渲染模式,我们也 比如构建一个混插的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。
如果您想要兼容低端。