免费的游戏引擎HGE使用记
2009-06-04 16:10
295 查看
2007-03-30 21:03
今天了解到有个HGE的2D免费游戏引擎,不由得心痒痒想看看,本来还害怕太大,下起来麻烦,结果去其官网一看,才2M多,马上就下下来。 官网地址:http://hge.relishgames.com/downloads.html Google了一下,英文资料比较多,中文就几篇,找到一篇中文的tutorial来试试吧。 Tutorial地址:http://www.rainstorey.com/blog/article.asp?id=66 二话不说,建立一个win32的普通窗口工程,选择空项目,把上面的代码拷贝一下,再将lib什么的加上,代码基本就是这样的: #include "hge.h" //引用HGE头文件,每个使用HGE Engine的程序都要有这行。 #include "hgesprite.h" //精灵系统头文件 #include "hgefont.h" //字体系统头文件 #include "hgeparticle.h" //粒子系统头文件 #pragma comment (lib,"D://src//libs//hge16//lib//vc//hge.lib") #pragma comment (lib,"D://src//libs//hge16//lib//vc//hgehelp.lib") //定义Engine的指针 HGE *hge=NULL; //HGE对象定义 hgeSprite *spt; hgeFont *fnt; //粒子系统 hgeParticleSystem *par; //颜色 hgeColor color; //纹理和声音句柄 HTEXTURE tex; HEFFECT snd; hgeQuad quad; //回调,游戏主循环 bool FrameFunc() { float dt=hge->Timer_GetDelta(); // 检测键盘 if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;//按下ESCAPE则结束循环 quad.v[0].tx=0; quad.v[0].ty=0; quad.v[1].tx=1; quad.v[1].ty=0; quad.v[2].tx=1; quad.v[2].ty=1; quad.v[3].tx=0; quad.v[3].ty=1; color.SetHWColor(0xFFFFE060); //更新粒子系统 //设置粒子密度 par->info.nEmission=150; par->Update(dt);//更新粒子系统状态 //渲染画面 hge->Gfx_BeginScene(); hge->Gfx_Clear(0x00000000); hge->Gfx_RenderQuad(&quad); par->Render();//粒子系统渲染 //输出字体 //fnt->SetColor(ARGB(0,0,48,156)); fnt->SetColor(color.GetHWColor()); fnt->printf(5,5,0,"deltatime:%.3f/nFPS:%d/nAuthor:thinkinnight", dt, hge->Timer_GetFPS()); hge->Gfx_EndScene();//渲染结束 //继续循环 return false; } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { //创建Engine接口 hge = hgeCreate(HGE_VERSION); //生成日志 hge->System_SetState(HGE_LOGFILE, "Game.log"); //设置回调 hge->System_SetState(HGE_FRAMEFUNC, FrameFunc); //设置窗口标题 hge->System_SetState(HGE_TITLE, "MyHGEDemo"); //设置最大FPS hge->System_SetState(HGE_FPS, 100); //是否是窗口模式 hge->System_SetState(HGE_WINDOWED, true); //设置窗口的大小 hge->System_SetState(HGE_SCREENWIDTH, 800); hge->System_SetState(HGE_SCREENHEIGHT, 600); //设置颜色深度 hge->System_SetState(HGE_SCREENBPP, 32); //使用声音资源 hge->System_SetState(HGE_USESOUND, true); //Engine初始化 if(hge->System_Initiate()) { //载入声音和纹理 snd=hge->Effect_Load("BG.mp3"); tex=hge->Texture_Load("texture.png"); quad.tex=hge->Texture_Load("texture.jpg"); if(snd && tex && quad.tex)//如果没有意外 { //载入字体 fnt=new hgeFont("font1.fnt"); //创建粒子Sprite用于粒子系统 spt=new hgeSprite(tex, 0,0, 32, 32); spt->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE); spt->SetHotSpot(16,16); // 创建和设置粒子系统 par=new hgeParticleSystem("trail.psi",spt); par->MoveTo(400,300);//粒子发散中心点 par->Fire();//启动 quad.blend=BLEND_ALPHABLEND | BLEND_COLORMUL | BLEND_NOZWRITE; for(int i=0;i<4;i++) { //设置颜色,格式为0xAARRGGBB quad.v[i].col=0xFFFFFFFF; } quad.v[0].x=0; quad.v[0].y=0; quad.v[1].x=1024; quad.v[1].y=0; quad.v[2].x=1024; quad.v[2].y=1024; quad.v[3].x=0; quad.v[3].y=1024; hge->Effect_PlayEx(snd,100,0,1.0f,true); //启动Engine开始主循环 hge->System_Start();//该方法反回则代码游戏将要退出 //删除用过的资源 delete par; par=NULL; delete fnt; fnt=NULL; delete spt; spt=NULL; hge->Target_Free(quad.tex); hge->Texture_Free(tex); hge->Effect_Free(snd); } } //Engine关闭 hge->System_Shutdown(); //释放指针 hge->Release(); return 0; } build一下,哈,成功。 运行一下呢?咦!怎么出来一下就跳出了,看来要看看代码,原来是这样 snd=hge->Effect_Load("BG.mp3"); tex=hge->Texture_Load("texture.png"); quad.tex=hge->Texture_Load("texture.jpg"); fnt=new hgeFont("font1.fnt"); par=new hgeParticleSystem("trail.psi",spt); 这些资源文件我都没有,在load的时候就出错了,那就加上吧。 首先是mp3和jpg文件,这个简单,马上搞定。 然后png文件,上网下载一个好了。 接着的font1.fnt和trail.psi,就用上面那位兄弟提供的程序包中的吧,呵呵,不好意思了。 忽然发现,上面那位兄弟的文件中还有一个font1.png文件,恩,很可疑,于是去查资料, 终于在wiki中找到,是由.fnt和.png来组成一个font,这个也一起要。 好了,现在一切都有了,先运行起来看看。 恩,不错不错,很漂亮! 不过,怎么感觉还是缺了点什么?我不是用了font的吗?似乎font也没输出什么来嘛 fnt->printf(5,5,0,"deltatime:%.3f/nFPS:%d/nAuthor:thinkinnight", dt, hge->Timer_GetFPS()); 这句到哪里去了? 呵呵,不急,我们有log文件 打开运行程序目录,发现里面新产生了一个game.log文件,打开文件,哦,里面说: “font1.fnt is incorrent font”,大概是这个意思了,因为我是下午的时候搞的,现在那个文件也找不到了。也就是说font1.fnt这个文件不对,我想起我是下载的最新版,是不是因为这个原因,老的.fnt文件不能使用了呢? 那怎么办?不能输出,不是很不爽。 找找吧,呵呵,给我找到了,在doc的同一级目录,有个tool目录,下面有fonted目录,下面有个exe,打开exe,哈,就是它了,原来是个生成字体文件的东东,用它生成一个字体文件,放入工程目录,再次运行,那一串字出来了。 不过字出来的时候默认是白色的,不喜欢,换个颜色吧, fnt->,点出来setcolor方法,加个RGB值进去,编译、运行,怎么字又不见了?看来我太乐观了,去看doc,原来是那个的ARGB,还有个Alpha值。 怎么办?难不倒我,不就多个值嘛,来找找sample,哈哈,找到了 于是加上一个hgeColor对象color color.SetHWColor(0xFFFFE060); fnt->SetColor(color.GetHWColor()); 其实直接用fnt->setcolor(0xffffe060)也行,不过照着sample来吧。 再次编译运行,成功!字体变成黄色!虽然本来想改成天蓝色的,不过懒得再找其ARGB值了,先就这样吧! 最终的运行效果截图如下: 怎么样?还不错吧!那些光点就是渲染的效果,是可以不断动的,而且还有一个mp3的背景音乐。字体也是不断刷新的。 不过也是有缺点的,不支持中文,从它使用的字体文件就知道了。看来要中文化,还是要花功夫去修改源码,以及添加字库文件的 |
相关文章推荐
- 免费的游戏引擎HGE使用记
- 和微软合作的garagegames公司推出基于XNA的游戏引擎TorqueX,支持快速开发(近期引擎免费提供使用)
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- 山寨Unity3D?搜狐畅游的免费开源游戏引擎Genesis-3D
- 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用
- Unity 游戏引擎的移动基本版从今天起免费提供
- 再谈 PyChecker 在游戏引擎环境下的使用
- andengine游戏引擎实用篇-box2d与瓦片地图的结合使用
- 公司准备使用KBEngine游戏服务端引擎
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- 使用游戏引擎photon打造一款特殊的远程控制软件
- 免费游戏引擎列表(更新中)
- 基于cocos2d-x的Android游戏中使用fmod音频引擎
- 开源、免费、跨平台的2D手机游戏引擎-----Cocos2d-x
- 使用C#作为Cocos2dx引擎脚本语言进行游戏开发——脚本运行时基础(二)
- 游戏中帧函数调用的顺序问题——基于HGE引擎的打砖块游戏
- 怎样在cocos2d里面如何使用物理引擎box2d制作弹球游戏
- 从零开始使用C ++和OpenGL编写游戏引擎-01-简介