Liny_@NotePad

沉迷ACG中

HGE粒子系统DEMO

YOYO posted @ 2009年8月26日 07:51 in 【游戏开发】 with tags HGE , 5787 阅读

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

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

代码如下:

  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(HINSTANCE, HINSTANCE, LPSTR, int)
  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目录下。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter