HGE粒子系统DEMO
一个粒子系统的简单demo,移动鼠标可以移动粒子发射点,单击鼠标左键发出音效。
版本:HGE 1.8.1
开发平台:Visual Studio 2005
代码如下:
-
//////////////////////////////////////////////////////////////////////////
-
// CopyRight(c) 2009, YOYO, All Rights Reserved.
-
// Author: LIN YiQian
-
// Created: 2009/08/25
-
// Describe: HGE 1.8.1 simple demo
-
//////////////////////////////////////////////////////////////////////////
-
#include "hge\\include\\hge.h"
-
#include "hge\\include\\hgefont.h"
-
#include "hge\\include\\hgesprite.h"
-
#include "hge\\include\\hgeparticle.h"
-
#include <Windows.h>
-
-
#pragma comment(lib, "hge\\lib\\vc\\hge.lib")
-
#pragma comment(lib, "hge\\lib\\vc\\hgehelp.lib")
-
-
HGE* hge; // HGE指针
-
hgeSprite* hsplite; // HGE粒子精灵指针
-
hgeParticleSystem* hparticle; // HGE粒子系统指针
-
-
hgeFont* hfont; // 字体
-
-
HTEXTURE htexture; // 纹理
-
HEFFECT heffect; // 音效
-
-
HCHANNEL hchannel;
-
-
const int HSCREEN_WIDTH = 800; // 屏幕宽度
-
const int HSCREEN_HEIGHT = 600; // 屏幕高度
-
-
float dx, dy; // 粒子精灵坐标(x,y)
-
-
//////////////////////////////////////////////////////////////////////////
-
// 函数描述:监听鼠标,控制粒子移动
-
//////////////////////////////////////////////////////////////////////////
-
void ListenMouseMove()
-
{
-
if (hge->Input_IsMouseOver())
-
{
-
hge->Input_GetMousePos(&dx, &dy);
-
}
-
}
-
-
//////////////////////////////////////////////////////////////////////////
-
// 逻辑函数
-
//////////////////////////////////////////////////////////////////////////
-
bool FrameFunc()
-
{
-
if (hge->Input_GetKeyState(HGEK_ESCAPE))
-
{
-
return true;
-
}
-
-
if (hge->Input_GetKeyState(HGEK_LBUTTON))
-
{
-
hchannel = hge->Effect_Play(heffect); // 播放音效
-
hge->Channel_SetVolume(hchannel, 50); // 设置音效大小
-
}
-
-
// 监听鼠标
-
ListenMouseMove();
-
-
return false;
-
}
-
-
//////////////////////////////////////////////////////////////////////////
-
// 渲染函数
-
//////////////////////////////////////////////////////////////////////////
-
bool RenderFunc()
-
{
-
hge->Gfx_BeginScene();
-
-
hge->Gfx_Clear(0); // 清屏(黑色)
-
-
// 粒子系统更新
-
float dt = hge->Timer_GetDelta();
-
hparticle->Update(dt);
-
hparticle->MoveTo(dx, dy);
-
hparticle->Render(); // 渲染粒子系统
-
-
// 输出时间
-
hfont->printf(5,5,HGETEXT_LEFT, "DeltaTime:%.3f\nFPS:%d\nAuthor:YOYO",
-
hge->Timer_GetDelta(), hge->Timer_GetFPS());
-
-
hge->Gfx_EndScene();
-
-
return false;
-
}
-
-
//////////////////////////////////////////////////////////////////////////
-
// 程序入口
-
//////////////////////////////////////////////////////////////////////////
-
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
-
{
-
hge = hgeCreate(HGE_VERSION);
-
-
// 设定参数
-
hge->System_SetState(HGE_TITLE, "YOYO's HGE DEMO"); // 窗体标题
-
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc); // 逻辑函数
-
hge->System_SetState(HGE_RENDERFUNC, RenderFunc); // 渲染函数
-
hge->System_SetState(HGE_WINDOWED, true); // 窗口显示
-
hge->System_SetState(HGE_SHOWSPLASH, false); // 关闭LOGO显示
-
hge->System_SetState(HGE_USESOUND, true); // 开启音效
-
hge->System_SetState(HGE_ZBUFFER, true); // 开启Z-Buffer
-
hge->System_SetState(HGE_SCREENWIDTH, HSCREEN_WIDTH); // 设置屏幕宽度
-
hge->System_SetState(HGE_SCREENHEIGHT, HSCREEN_HEIGHT); // 设置屏幕高度
-
hge->System_SetState(HGE_SCREENBPP, 30); // 设置屏幕分辨率
-
hge->System_SetState(HGE_FPS, 50); // 设置速率
-
hge->System_SetState(HGE_LOGFILE, "log_demo.log"); // 设置日志记录文件
-
-
if (hge->System_Initiate()) // 获取句柄
-
{
-
// 加载纹理
-
htexture = hge->Texture_Load("..\\TestHGE\\Res\\particles.png");
-
-
// 加载音效
-
heffect = hge->Effect_Load("..\\TestHGE\\Res\\folder.wav");
-
-
// 载入字体
-
hfont = new hgeFont("..\\TestHGE\\Res\\ms_ui_gothic.fnt");
-
hfont->SetColor(0xff3300ff);
-
-
if (htexture == NULL || heffect == NULL) // 如果加载不成功则退出
-
{
-
hge->System_Shutdown();
-
hge->Release();
-
return 1;
-
}
-
-
// 创建粒子精灵
-
hsplite = new hgeSprite(htexture, 0, 0, 32, 32);
-
hsplite->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE); // 设置混合模式
-
hsplite->SetHotSpot(16, 16); // 设置粒子精灵中心点
-
-
// 设置粒子精灵初始位置:屏幕中心
-
dx = HSCREEN_WIDTH/2;
-
dy = HSCREEN_HEIGHT/2;
-
-
// 创建粒子系统
-
hparticle = new hgeParticleSystem("..\\TestHGE\\Res\\sliver.psi", hsplite);
-
hparticle->MoveTo(dx, dy);
-
hparticle->Fire();
-
-
// 启动HGE
-
hge->System_Start();
-
-
// 释放纹理
-
hge->Texture_Free(htexture);
-
-
// 释放音效
-
hge->Effect_Free(heffect);
-
-
// 删除指针
-
delete hfont;
-
hfont = 0;
-
delete hparticle;
-
hparticle = 0;
-
delete hsplite;
-
hsplite = 0;
-
}
-
-
hge->System_Shutdown();
-
hge->Release();
-
-
return 0;
-
}
本例中用到的资源:纹理(particles.png),音效(folder.wav),字体(ms_ui_gothic.fnt),粒子(sliver.psi)
请放置于TestHGE/Res目录下。