今天了解到有个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的背景音乐。字体也是不断刷新的。
不过也是有缺点的,不支持中文,从它使用的字体文件就知道了。看来要中文化,还是要花功夫去修改源码,以及添加字库文件的。