HGE粒子系统DEMO

一个粒子系统的简单demo,移动鼠标可以移动粒子发射点,单击鼠标左键发出音效。

版本:HGE 1.8.1
开发平台:Visual Studio 2005

代码如下:

Code:
  1. //   
  2. //      CopyRight(c) 2009, YOYO, All Rights Reserved.   
  3. //      Author: LIN YiQian   
  4. //      Created: 2009/08/25   
  5. //      Describe: HGE 1.8.1 simple demo   
  6. //   
  7. #include "hge//include//hge.h"   
  8. #include "hge//include//hgefont.h"   
  9. #include "hge//include//hgesprite.h"   
  10. #include "hge//include//hgeparticle.h"   
  11. #include <Windows.h>   
  12.     
  13. #pragma comment(lib, "hge//lib//vc//hge.lib")   
  14. #pragma comment(lib, "hge//lib//vc//hgehelp.lib")   
  15.     
  16. HGE*                hge;                //      HGE指针   
  17. hgeSprite*                  hsplite;      //    HGE粒子精灵指针   
  18. hgeParticleSystem*      hparticle;    //  HGE粒子系统指针   
  19.     
  20. hgeFont*                        hfont;    //        字体   
  21.     
  22. HTEXTURE                        htexture;       //     纹理   
  23. HEFFECT    heffect; //       音效   
  24.     
  25. HCHANNEL                        hchannel;   
  26.     
  27. const int                     HSCREEN_WIDTH = 800;   // 屏幕宽度   
  28. const int                     HSCREEN_HEIGHT = 600;  //        屏幕高度   
  29.     
  30. float            dx,        dy;          //   粒子精灵坐标(x,y)   
  31.     
  32. //   
  33. //      函数描述:监听鼠标,控制粒子移动   
  34. //   
  35. void ListenMouseMove()   
  36. {   
  37.         if (hge->Input_IsMouseOver())   
  38.         {   
  39.                 hge->Input_GetMousePos(&dx, &dy);   
  40.         }   
  41. }   
  42.     
  43. //   
  44. //      逻辑函数   
  45. //   
  46. bool FrameFunc()   
  47. {   
  48.         if (hge->Input_GetKeyState(HGEK_ESCAPE))   
  49.         {   
  50.                 return true;   
  51.         }   
  52.     
  53.         if (hge->Input_GetKeyState(HGEK_LBUTTON))   
  54.         {   
  55.                 hchannel = hge->Effect_Play(heffect);   // 播放音效   
  56.                 hge->Channel_SetVolume(hchannel, 50);   // 设置音效大小   
  57.         }   
  58.     
  59.         //      监听鼠标   
  60.         ListenMouseMove();   
  61.     
  62.         return false;   
  63. }   
  64.     
  65. //   
  66. //      渲染函数   
  67. //   
  68. bool RenderFunc()   
  69. {   
  70.         hge->Gfx_BeginScene();   
  71.     
  72.         hge->Gfx_Clear(0);            //    清屏(黑色)   
  73.     
  74.         //      粒子系统更新   
  75.         float dt = hge->Timer_GetDelta();   
  76.         hparticle->Update(dt);   
  77.         hparticle->MoveTo(dx, dy);   
  78.         hparticle->Render();    //  渲染粒子系统   
  79.     
  80.         //      输出时间   
  81.         hfont->printf(5,5,HGETEXT_LEFT, "DeltaTime:%.3f/nFPS:%d/nAuthor:YOYO",   
  82.                 hge->Timer_GetDelta(), hge->Timer_GetFPS());   
  83.     
  84.         hge->Gfx_EndScene();   
  85.     
  86.         return false;   
  87. }   
  88.     
  89. //   
  90. //      程序入口   
  91. //   
  92. int WINAPI WinMain(HINSTANCEHINSTANCELPSTRint)   
  93. {   
  94.         hge = hgeCreate(HGE_VERSION);   
  95.     
  96.         //      设定参数   
  97.         hge->System_SetState(HGE_TITLE, "YOYO's HGE DEMO");      //    窗体标题   
  98.         hge->System_SetState(HGE_FRAMEFUNC,     FrameFunc);    //        逻辑函数   
  99.         hge->System_SetState(HGE_RENDERFUNC, RenderFunc);       //     渲染函数   
  100.         hge->System_SetState(HGE_WINDOWED,      true);                        //      窗口显示   
  101.         hge->System_SetState(HGE_SHOWSPLASH, false);        //  关闭LOGO显示   
  102.         hge->System_SetState(HGE_USESOUND,      true);                        //      开启音效   
  103.         hge->System_SetState(HGE_ZBUFFER,       true);   //       开启Z-Buffer   
  104.         hge->System_SetState(HGE_SCREENWIDTH, HSCREEN_WIDTH);   // 设置屏幕宽度   
  105.         hge->System_SetState(HGE_SCREENHEIGHT, HSCREEN_HEIGHT); //       设置屏幕高度   
  106.         hge->System_SetState(HGE_SCREENBPP,     30);   //       设置屏幕分辨率   
  107.         hge->System_SetState(HGE_FPS,   50);                            //     设置速率   
  108.         hge->System_SetState(HGE_LOGFILE,       "log_demo.log");       //     设置日志记录文件   
  109.     
  110.         if (hge->System_Initiate())     //   获取句柄   
  111.         {   
  112.                 //      加载纹理   
  113.                 htexture = hge->Texture_Load("..//TestHGE//Res//particles.png");   
  114.     
  115.                 //      加载音效   
  116.                 heffect = hge->Effect_Load("..//TestHGE//Res//folder.wav");   
  117.     
  118.                 //      载入字体   
  119.                 hfont = new hgeFont("..//TestHGE//Res//ms_ui_gothic.fnt");   
  120.                 hfont->SetColor(0xff3300ff);   
  121.     
  122.                 if (htexture == NULL || heffect == NULL)        //      如果加载不成功则退出   
  123.                 {   
  124.                         hge->System_Shutdown();   
  125.                         hge->Release();   
  126.                         return 1;   
  127.                 }   
  128.     
  129.                 //      创建粒子精灵   
  130.                 hsplite = new hgeSprite(htexture, 0, 0, 32, 32);   
  131.                 hsplite->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE);        //      设置混合模式   
  132.                 hsplite->SetHotSpot(16, 16);    //  设置粒子精灵中心点   
  133.     
  134.                 //      设置粒子精灵初始位置:屏幕中心   
  135.                 dx = HSCREEN_WIDTH/2;   
  136.                 dy = HSCREEN_HEIGHT/2;   
  137.     
  138.                 //      创建粒子系统   
  139.                 hparticle = new hgeParticleSystem("..//TestHGE//Res//sliver.psi", hsplite);   
  140.                 hparticle->MoveTo(dx, dy);   
  141.                 hparticle->Fire();   
  142.     
  143.                 //      启动HGE   
  144.                 hge->System_Start();   
  145.     
  146.                 //      释放纹理   
  147.                 hge->Texture_Free(htexture);   
  148.     
  149.                 //      释放音效   
  150.                 hge->Effect_Free(heffect);   
  151.     
  152.                 //      删除指针   
  153.                 delete hfont;   
  154.                 hfont = 0;   
  155.                 delete hparticle;   
  156.                 hparticle = 0;   
  157.                 delete hsplite;   
  158.                 hsplite = 0;   
  159.         }   
  160.     
  161.         hge->System_Shutdown();   
  162.         hge->Release();   
  163.     
  164.         return 0;   
  165. }  

本例中用到的资源:纹理(particles.png),音效(folder.wav),字体(ms_ui_gothic.fnt),粒子(sliver.psi
请放置于TestHGE/Res目录下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值