版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AndEngine游戏引擎讲解AndEngine是一款以OpenGLES方式进行画面渲染的2D游戏引擎,可以运行在支持Android1.6及以上版本的系统当中。它在默认情况下已经可以支持中文,采用屏幕坐标系绘也更符合一般Android绘图习惯。如何使用AndEngineAndEngine的基本运行原理解读AndEngine源码后我们可以发现AndEngine除了采取低耦合、高内聚的框架策略细分引擎模块,使用OpenGLES进行游戏渲染之外;该引擎还以双线程方式具体地说,其绘图线程位于AndEngine提供的GLSurfaceView内部类GLThread(在AndEngine的org.andd
2、ev.andengine.opengl.view包下,非Android默认的当AndEngine进行游戏绘图时,游戏业务线程会通过wait方式锁定,而当游戏业务处理时,也会以同样的手段锁定绘图线程,二者间具体交互关系由Engine类另外,或许是考虑到持续双线程运行电量消耗较大的缘故,AndEngine默认情况下要求用户启动PowerManager进行电源管理,故此需要权限支持,否则初始化时Log会提示缺少相关配置,并建议你在AndroidManifest.xml中添加权限PS:无AndEngine的基本运行流程由于AndEngine是专供Android使用的2D游戏引擎,所以作为启动类的Act
3、ivity肯定必不可少,而AndEngine也理所应当的提供给我们这样一个Activity,那就是其中四个必须被重载函数的启动顺序如下:onLoadEngine-onLoadResources-onLoadScene-onLoadComplete具体的讲,AndEngine会首先加载Engine类实例通知系统游戏引擎的基本运行方式,而后加载游戏资源,其次加载游戏场景实例,最后通过onLoadComplete通此外,由于BaseGameActivity类重载了父类Activity的onResume与onPause函数以保证其自身的正常运行,所以不建议在继承BaseGameActivity时再次重
4、载上AndEngine的基本运行方式上文介绍了AndEngine的基本运行机制与运行流程,然而仅仅这样AndEngine还是无法实际运行,因为Engine与Scene都没有获得具体实现。假如我们想要在staticfinalintCAiMERA_WIDTH326;staticfinalintCAMERA_HEIGHT-480JCameraandCamera;TexturernyFontTextureiFontftyFontipublicclassMainextendsBaseGameActivityprivateprivateprivateprivateprivatepublicvoid。门Lo
5、md匚口mplete()(publicEngineonL&adEngineC)/枸建摂幄机this.and匚anernw9,CAMERA_W:DTH,C4MERA_HEIGHT)j/mEnKinfl全屏显示,手机方向拘竖屏*按比亦returnnewEnginenewEngineOptions(true,ScrflenOrientation,PORTRAITfnewRatioResolutionPo1icy(CAMERA_WIDTHCAMEFtA.HEIGHT),this.arbdCamera)ipublicvoidonLoadRescurcest)/构谨一个级I里用以显示交手thiimyFia
6、ntTtjttijrF=n亡詹Texture(2S6j256TexturtOptioftsDEFAULT);/媲宇体thi5sffliyFcjint:newFant(this-4myFontTexturejTypeface,ereate(Typeface.DEFAULTTypeface.BOLD)翅true.Color,WHSTE);/连入想关纹哩及手体thismEnglue:.getlextureManager()3.口右dTexture(this.BffliyFontTexture);this.mEngin?.getFpntH曰门輕只畧厂()IgadFQnt(thisumyFgnt);pu
7、blicScentonLoadScerit()(/枸建场昱允许的最夭y”数里拘ifinalScnescene=newScene(l)j/使甬可Aanab1eTeKtSFPSCE的父类Ttxt不光讦改鸾显示內咨h恆蓋在1爲5字俸为MyFiwit中斯规走的,前參光许显示弓个字苻f设30示几个詡,翊M能显示几个,/MdEfigim不能自动扩帶不壇以测會侔寸输?荐蒔敎计算一)finalChangest?IflTexttext-newChangeablelext(515tthisJrnyFante+05)j/注ff|FPStfiis.Engine.registtrlJpdattHartdltrCnewF
8、PSLcgg.tr()protectedvoidcnHand1AveraDuratonE1apsd(finalfloatpFPS)Muper.onHanaleAveragePurtianfId(pFP$);/酱iB內苔到Gen甲edtjleTexttext.setText+pFK););/将匚h*ng凹bl*Text逹入场呈acene*flttachCiildfteKtjt;/枸建场景,可苔綁匸额旳1rttumscene;运行效果如下图所示:另外,事实上BaseGameActivity并非AndEngine提供的唯一Activity,其UI包下尚有以SplashScene场景作为特效启动的Ba
9、seSplashActivity类,以及通过重如何使用AndEngine事实上AndEngine中组件颗粒都非常细小,几乎每个由AndEngine提供的功能都会有一个对应的类存在。比如仅Engine就衍生出DoubleSceneSplitScreenEngine(可以同时显示并缓存两个Scene的Engine,通过setFirstScene以及setSecondScene进行双屏切换,即AndEngine的IUpdateHandler接口IUpdateHandler类是AndEngine引擎中使用频率非常之高的组件之一,其本身是一个接口,内部有onUpdate以及reset两个函数等待实现,几
10、乎所有AndEngin具体的讲,所有通过AndEngine中registerUpdateHandler函数注册的IUpdateHandler,都会被保存到一个叫做UpdateHandlerList的IUpdateHandler接|另外,与UpdateHandlerList集合类作用类似的还有RunnableHandler类,该类同样是IUpdateHandle啲具体实现,它的作用在于保存并执行一次标准RurAndEngine的Async方法默认情况下AndEngine的资源加载会在构建Engine之后,调用onLoadResources函数时进行同步加载。但如果一次性加载资源太多时,便可能会面
11、临一个具体的讲AndEngine对Android系统自带的AsyncTask类进行了适当圭寸装(具体圭寸装在BaseActivity类中,该类为BaseGameActivity的父类AndEnginepublicvoidoniLoBdComp*)publicEngineonLoadEng.ine()/枸建塢擦机thisndCameranew5ea0,CAMERA_WIDTHCAMERA_HEIGHT);/枸送Engine,全屛显示,手机方向權显確比例拉悴returnnewEnginefnewEngineOptions(true,ScreenDrientation.PORTRAIIfnewHat
12、ioResolutionPolicy(CAMERA_WIDTH,CAMERA_HE1GHT)fthis.andCentra);publicvoidonLoadRetaur匚运行一亍异步如融设走AroeressDia1引谊航璋施餉字初內苔知亡虫疑源this.BdciAsyncRBstriftg.testljR.strine,tes-tajn言wCallabl*()希望AndEngineg歩加载的埶据publicVoidcallOthrowsExceptionfor(inti=0;iInteger.MAX.VALUE;i+)returnnull;/当加裁亮麟回调1可在此遵行一楚加瞬毕的華肓处遐ne
13、worg,anddev,.andengine,util.Ca11back()fpublicvoidonCallbackffinalVoidoCallbackValije)Le.d(h,Callbac:lc,TilFar);JpLiblicSceneonLaadSceneO构建场象允许的杲犬L旳倉嘲垦拘1finalS匚enescene=newScene1);returnscene;AndEngine中的精灵调用精灵类,是一个大家耳熟能详,并且任何游戏引擎无法回避的关键性组件之一,它常常被用来表示一个游戏中角色或者特定画面要素。如此重要的存在,An(publicclassHainextendsBa
14、seGameActivltyprivatestaticfinialifitCAHERA_WEDTH320;privatestaticfinalintCAMERAHEIGHT-460jprivateCameraan-dCa-meraiprivateTextureRtgicnsiyTextureRegion;pub1icvoidqnLaadCompletff()publicEngineonLoadEngineO/构崑规像机this.andCameranewCameraJ0,CAWERA_HIPT鸣AMERA_HEIGHT)j/狗建Engirt全屏显示,手机方向開竖IS桜比例擁诩returnnemE
15、nginefnewEngirrtp-tions(trueScrtenOrientatinn.PORTRAITfnfhRati口QutinnP01iey(CAHERA_WIDTHCAKERA_HEIGHT),thisandCaner&)publicvoidanLodRtsaurc()TexturemyTexturesnewTextureC&i,&4,TextureOptions,DEFAULT);加戦指走路徑纹!里封唧Textureegionthis-myTextureRegionTextureRegianFactcirycreateFroinAssst(myText广色卫this,Ballin
16、g,%0);戟入织理到TextureHanagerthis-.g-ttEngirne()g.ttTextureHanage广()load!extures(myTexture);publicSceneonLoadScene()构建场景,兀许的蹑大L科e碘塑为1finalScenescenene-wSceftefl);/nyTextyreRegipn|4)Sprite(TextureRegiqfi內部有Texture&t|?|用AndEngS选加栽了h到坐标55山5Spritesprite=newSprite(SSfmyTextcreRegion);H游加ft杲scenertachChild(sp
17、rit)returnscene;AndEngine的精灵动画在绝大多数的游戏开发中,仅仅有精灵类存在是并不足够的,我们往往还需要让精灵作出绚丽的效果以吸引用户眼球,而这些效果在AndEngine中,统一通过publicclassWainextends6aseG3ffeActivityprivatestat亡finalintCAPIERA_HIDTH32iprivatestaticfinalirtCAMEFLA_HEIGHT48jprivateCameraand匚日囲己八日;privateTextureReeionmyTextureRegion;publicv-oitfonLoadlCoeipl
18、ete()publicEngineonLoadEngine()/髓搐憊机thii.andCarnera=ntvCafflera(ft,CAHEftAWlDTH,CAMERA_KE1GHT;/构建E臨:LnP全屏昼示,手机方向为豊屏,按比例竝伸returnnewEngine(newEngineOption5(tryeJIScreenOrientatien,POftTRAIT毗wRatioResolutionPolicy(CAMERA.WIDTH;CAWERA_HEIGnT)fthisandCamera);publicvoidonLciacIResciurces()/拘建纹理TexturemyTe
19、xture=newTexture(64,64jTextureOptions.DEFAULT);/加栽指走路轻纹團rttyT些tuRe吐州thisamyTextureRegicinTextureRegionF叮tory匚厂皀ateFromA-sset(myTexture*thiseall.png10);/鞍入纹理到TextureFlanagerthig电tEngin&()-getTextureKanager().1esdTextures(mylextur)jpublicSceneonLaaidSceneO/在Log中显示FP娥getErteifteO,.reg!sterupdateHandier
20、(newFPSLoger();./媲场尉允许的最走“y”教昱加finlScenescene=nwScen(l)j/軼谢翻中匕坐钵finlintcentecx=(GvlEftA_WlDTH*tnis.myTextureRegion.getwidth()/丄;finalinttinterY(CAHERA_HEIGHT-this.nyTxturRgion.Hfriftht()/2j/以mfTextUreRflion建和ritdfTdxtur辭Egi卯内部有Tgxtur啲即用-AndEngine左构逢Sr迅加载了n到詹霍中心finalSpritespritt=ncMSprite(centerx.,ce
21、nterYthis.myTexturefiteiDn);/温唏免seelierattachChild(sprite);/刮隹一组动作序列,岂先10技内神I朗寸特庭转$闘废,祈启丄0秒內革时逹时廿矗惜站0農StquftrtCfEntityHcdifiirballAttiDilnewSequeftceEfitityHDdifie-r(nwJtotstionKodi-Fjer(,%newRotationHodifier(10苛叭a);注册动作帛列到播灵spritesregistErEntityModifigr戈cAidn);returnscene;AndEngine的常用模块介绍关于Engine:E
22、ngine是AndEngine的核心所在,它对AndEngine引擎中Camera、Scene等重要组件进行了统一管理,但必须和BaseGameActivity合作使用,利关于BaseGameActivity:如果你想正常使用AndEngine,那么当前Activity就必须继承自BaseGameActivity或其子类,否则你连初始化Engine也做不到。虽然它还有父类BaseAc关于IResolutionPolicy:IResolutionPolicy是一个接口类,其中只规定了onMeasure函数的实现格式。事实上,AndEngine中所有该类具体实现的作用与标准View中的onM在An
23、dEngine的org.anddev.andengine.engine.options.resolutiopolicy包下有一组IResolutionPolicy接口的具体实现,分别为BaseResolutionPolic最后,所有IResolutionPolicy的实现类,都要随着EngineOptions于初试化时传递给Engine实例才起作用。关于Camera:该类即我们常说的游戏摄像机,在AndEngine的Camera有两种作用,一是用以调节屏幕的显示区域,二是利用HUD类实际绘制游戏屏幕于手机之上。关于Scene:场景容器,作用类似于LGame中的Screen,能够将某一特定场景作
24、为游戏模块进行调用,我们可以利用它来切换当前游戏的画面与触摸屏监听,切换方法关于Entity:Entity是IEntity接口的具体实现,也是AndEngine中无论Scene、Layer、Sprite(这个继承关系比较远,中间隔了BaseRectangle、RectangularShape、关于Texture:Texture是AndEngine所提供的纹理用类,但Texture本身(在AndEngine中)并没有提供加载图片的方法,必须通过TextureRegionFactory类(更准确关于TextureRegion:TextureRegion的父类是抽象类BaseTextureRegio
25、n,主要功能也被封装在BaseTextureRegion类当中,AndEngine提供了TextureRegionFactory这个然而,事实上AndEngine中只有TextureRegion才更接近于通常意义上的Texture。或者说,只有TextureRegion+Texture时,我们才能较为完整的使用AndEngine纹理功能。严肃的讲,AndEngine中的Texture有很多功能必须靠TextureRegion最终完成,比如AndE关于TextureOptions:在AndEngine中,TextureRegionFactory类决定纹理的加载路径,Texture类作为承载纹理的实体对象,而TextureOptions类决定了纹理的渲染方式。也就是说,OpenGLES将以何种方式显示纹理图像,都由TextureOptions类所决定。在当前最新版本的An
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第四章 多彩的光2012.2
- 集成电路供电配电系统升级改造方案
- 新工人三级教育卡
- 第八课 法治中国建设 第三框法治社会
- 甲状腺疾病护理新进展
- 学校汛期安全检查情况记录表
- 2025年人工智能伦理评估技术伦理指南
- 糖尿病护理新技术与新进展
- 兰亭集序(教学课件) -高中语文人教统编版
- 结膜炎的预防与控制措施
- JJG 521-2024 环境监测用X、γ辐射空气比释动能率仪检定规程
- 2025-2026学年高一上学期做个文明人:青春修养主题班会
- 西红柿的营养奥秘(大班教学)
- 红楼梦木石前盟课件
- GB/T 31150-2025汽车零部件物流塑料周转箱尺寸系列及技术要求
- 中考英语作文写作万能句型汇编
- 清理河道劳务合同范本
- 树木疏伐施工方案
- 雨课堂在线学堂《大数据可视化》单元考核测试答案
- 安装灭火器施工方案模板
- 2025年医疗器械自查报告模板
评论
0/150
提交评论