【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2600|回复: 0

[转帖]HGE连载教程(1)

[复制链接]
发表于 2006-3-6 16:52:23 | 显示全部楼层 |阅读模式
HGE Engine易学易用很适合初学者进行学习并且很容易的写出自己的游戏。你基本上不需要具备C++的很多知识就可使用HGE进行实际的工作。鉴于HGE目前大都是E文教程,这里我就为大家领进HGE Engine游戏开发的大门。顺便说一下在HGE的官方论坛上有许多我们国人参与讨论哦!
做为第一讲我们先来带领你看一下迷人的Particle也就是粒子系统,何为粒子系统呢?就是用电脑在显示屏上画出不同形状和颜色数目巨多的点并加入算法来控制这些点的轨迹等效果。粒子系统可以用来模拟水火电气等自然现象。不多说了,Let's Go!
下面是代码:在Visual Studio 2003.Net/C++/Windows XP编译通过。

MyHGEDemo1.cpp
-----------------------------------------------------------------------------------------------------------------------------------------------
#include "hge.h" //引用HGE头文件,每个使用HGE Engine的程序都要有这行。
#include "hgesprite.h" //精灵系统头文件
#include "hgefont.h" //字体系统头文件
#include "hgeparticle.h" //粒子系统头文件

//定义Engine的指针
HGE *hge=NULL;

//HGE对象定义
hgeSprite *spt;
hgeFont *fnt;
//粒子系统
hgeParticleSystem *par;

//纹理和声音句柄
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;

//更新粒子系统
//设置粒子密度
par->info.nEmission=150;
par->Update(dt);//更新粒子系统状态

//渲染画面
hge->Gfx_BeginScene();
hge->Gfx_Clear(0x00000000);
hge->Gfx_RenderQuad(&quad);
par->Render();//粒子系统渲染
//输出字体
fnt->printf(5,5,"deltatime:%.3f\nFPS:%d\nAuthor:Rain", 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.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;
}

-----------------------------------------------------------------------------------------------------------------------------------------------
哈哈,代码就是这些。无需多言,我加入了详细的注释。更加详细的在以后我会慢慢道来。
注:编译时要加入hge.lib和hgehelp.lib二个链接库。
这里提供 该文件只允许会员下载! 登陆 | 注册
这里并不提供源代码下载,希望自己慢慢键入代码已加深记忆。另为压缩包中不提供HGE Engine的Dll和BASS声音库的支持文件,相信要学习HGE的朋友都因该有了。
以下是运行时的截图:






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-19 02:18

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表