1HGEHGEHGEHGE系列教材(系列教材(系列教材(系列教材(1111))))------------简介简介简介简介HGE是一个硬件加速(Hardwareaccelerated)的2D游戏引擎(GameEngine),HGE是一个富有特性的中间件,可以用于开发任何类型的2D游戏。HGE封装性良好,以至于你仅仅需要关系游戏逻辑(GameLogic),而不需要在意DirectX,Windows消息循环等。HGE架构在DirectX8.0之上,能够跑在大多数的Windows系统上。1.选用HGE的理由:1)专业化---专注于2D领域2)简单化---非常容易使用3)技术优势---基于Direct3DAPI有较好的性能和特性4)免费---对于个人或者商业用户都免费,遵循zlib/libpnglicense5)代码高度的一致性---代码是否具有一致性,是衡量代码质量的标准之一(《CodeReading:TheOpenSourcePerspective》)2.体系结构:HGE有3个抽象层(layersofabstraction):1)核心函数(CoreFunctions)处于核心的函数和例程(routines),被整个系统所依赖。2)辅助类(HelperClasses)游戏对象相关的类,架构于HGECoreFunctions层之上,辅助用户进行游戏开发。3)创作工具(AuthoringTools)用于游戏开发的一组工具。2从上图可以看见:1)用于代码只需要架构在HGEHelperClasses之上2)通常游戏资源(GameResources)需要使用HGE创作工具来产生3.体系结构概述:1)CoreFunctions层1图形格式支持:支持BMP,JPG,PNG,TGA,DDS,DIB文件格式2支持窗口模式和全屏模式3音频支持和音乐回放(musicplayback):支持WAV,MP3,MP2,MP1andOGG音频文件格式(audiofileformats),支持MO3,IT,XM,S3M,MTM,MODandUMX音乐文件格式(musicfileformats),支持压缩流的回放。声音大小和声道的控制4输入设备支持:鼠标和键盘5资源:读取硬盘上的资源,支持ZIP打包的文件格式6日志支持2)HelperClasses层1精灵(Sprites)和动画(Animations)对于所有硬件设备特性的直接支持:锚点(anchor)支持,伸展、缩放、旋转的支持,不同的回放模式的支持32字体读取和渲染(render)位图字体,多种字体排列方式,旋转和缩放字体,字符串宽度计算等3粒子系统(particlesystems)和网格变形(distortionmesh)高效的粒子系统,可用于创建烟雾、爆炸、魔法效果等,提供粒子系统的管理,支持定界盒(boundingbox)计算和冲突检测(collisiondetection)4资源管理:通过简单的函数调用,来创建复杂的对象,自动的内存管理。对于资源组(resourcegroups)采用预先缓存和特殊的清除处理(这是一种通过控制对象分配和释放来提高效率的方法)5GUI:强大而灵活的GUI管理,支持动画式的GUI6矢量(Vectors),对于2D矢量的完全支持3)AuthoringTools层1资源的打包(pack):HGE使用ZIP格式的资源包,你可以使用任何的打包工具,甚至还可以给资源包加密2纹理(Texture)工具3粒子系统编辑器:能够设定粒子的速度,方向,生命周期,轨迹,颜色,透明等4位图字体编辑器:运行通过系统中已经安装的字体来创建位图字体,你可以使用图形编辑器来为位图字体添加额外的效果4HGEHGEHGEHGE系列教材(系列教材(系列教材(系列教材(2222))))------------安装安装安装安装HGEHGEHGEHGE在HGE的文档中有详细谈到如何安装的问题,这里讲一下VC6平台的安装问题:1.下载完HGE之后,需要使用到lib\vc文件夹下的库文件以及include目录下的头文件2.打开Tools-Options-DirectoriesTools-Options-DirectoriesTools-Options-DirectoriesTools-Options-Directories5如上两图,添加路径3.在游戏开发中使用HGE首先建立一个空的Win32工程,然后选择Project-Settings...-LinkProject-Settings...-LinkProject-Settings...-LinkProject-Settings...-Link按图所示,输入hge.lib和hgehelp.lib当然,也可以使用预编译器指令pragram来打到同样的目的。6HGEHGEHGEHGE系列教材(系列教材(系列教材(系列教材(3333))))------------初试初试初试初试HGEHGEHGEHGE当HGE安装完成之后,就可以使用了,关于HGE的安装,可以参考《HGE系列教材(2)---安装HGE》现在使用HGE开发一个极小的程序:1.包含hge.h文件,并且定义一个HGE的指针,通过这个指针,我们可以访问HGECoreFunctions层的函数。#includehge.hHGE*pHge=0;使用完HGE指针之后,需要释放这个指针,pHGE-Release();2.帧函数(FrameFunction)是一个用户定义的函数,每一帧时间,它会被HGEEngine调用一次,函数返回true,则调用停止:boolFrameFunc(){if(hge-Input_GetKeyState(HGEK_ESCAPE)){returntrue;}returnfalse;}3.建立一个WinMain函数,WinMain函数是标准的Windows应用程序入口,这里,我们首先初始化HGE指针:intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd){pHge=hgeCreate(HGE_VERSION);//...7pHge-Release();return0;}通过HGE指针,我们才可以访问HGEEngine的接口。调用了hgeCreate函数之后,不要忘记了使用Release函数释放资源。4.初始化操作:有一些初始化操作需要完成,使得程序能够跑起来://设置帧函数pHge-System_SetState(HGE_FRAMEFUNC,FrameFunc);//设置窗口模式pHge-System_SetState(HGE_WINDOWED,true);//设置不使用声音pHge-System_SetState(HGE_USESOUND,false);//设置标题为MinimalHGEpHge-System_SetState(HGE_TITLE,MinimalHGE);最后需要调用函数System_Initiate来完成初始化操作,这个函数返回值是一个bool类型的变量,如果是true那么表示初始化成功,如果是false表示出错,这时候可以通过System_GetErrorMessage函数来获取错误消息:if(pHge-System_Initiate()){pHge-System_Start();}else{MessageBox(NULL,pHge-System_GetErrorMessage(),Error,MB_OK|MB_ICONERROR|MB_APPLMODAL);}再程序结束的时候,需要释放资源:pHge-System_Shutdown();pHge-Release();5.整个完整的程序如下:8#includehge.hHGE*pHge=0;boolFrameFunc(){if(pHge-Input_GetKeyState(HGEK_ESCAPE)){returntrue;}returnfalse;}intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd){pHge=hgeCreate(HGE_VERSION);pHge-System_SetState(HGE_FRAMEFUNC,FrameFunc);pHge-System_SetState(HGE_WINDOWED,true);pHge-System_SetState(HGE_USESOUND,false);pHge-System_SetState(HGE_TITLE,HGE小程序);if(pHge-System_Initiate()){pHge-System_Start();}else{MessageBox(NULL,pHge-System_GetErrorMessage(),Error,MB_OK|MB_ICONERROR|MB_APPLMODAL);}pHge-System_Shutdown();pHge-Release();return0;}注意,程序运行之后,一直调用函数FrameFunc直到用户按下ESC,那么跳到pHge-System_Shutdown()处执行。9HGEHGEHGEHGE系列教材(系列教材(系列教材(系列教材(4444))))------------初探初探初探初探HGEHGEHGEHGECoreCoreCoreCoreFunctionsFunctionsFunctionsFunctions层层层层HGECoreFunctions层中的函数需要通过HGE指针来访问,就如《HGE系列教材(3)---初试HGE》所谈到的一样,通过调用hgeCreate函数来初始化HGE指针,HGECoreFunctions层中的函数,大致分层一下几类:1.接口函数(Interfacefunctions):hgeCreate---初始化HGE指针,这是一个全局函数,除了这个函数,HGECoreFuntions中所有的函数都需要通过HGE指针调用。Release---释放HGE接口,调用了hgeCreate就应该调用Release释放。2.系统函数(Systemfunctions):这类函数都是以System_开头,后面加上表示函数意义的单词(不出现下划线),之后介绍的函数也将使用这种命名方式,即类型前缀+有意义的单词:System_Initiate初始化相关软件和硬件System_Shutdown恢复声音模式并且释放资源System_Start开始运行用户定义的帧函数System_SetState设置系统内部状态System_GetState返回内部状态的值System_GetErrorMessage返回最后出错的HGE错误描述符System_Log在日志文件中书写格式化消息System_Launch运行一个URL或者外部的可执行文件或数据文件System_Snapshot截屏并保存到一个文件3.资源函数(Resourcefunctions):Resource_Load从硬盘上读取资源到内存中Resource_Free从内存中删除读取的资源Resource_AttachPack附加一个资源包Resource_RemovePack移除一个资源包Resource_RemoveAllPacks移除之前关联的所有资源包Resource_MakePath建立一个绝对文件路径Resource_EnumFiles通过通配符来枚举文件Resource_EnumFolders通过通配符来枚举文件夹104.初始化文件函数(initializationfilefunctions)Ini_SetInt在初始化文件中写入一个整数值Ini_GetInt从