一个粒子系统的简单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目录下。