HGE基本DEMO

来源:互联网 发布:webshell批量扫描器 编辑:程序博客网 时间:2024/05/21 16:53

一个简单的显示粒子纹理图片、播放音效的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//hgesprite.h"   
  9. #include <Windows.h>   
  10.     
  11. #pragma comment(lib, "hge//lib//vc//hge.lib")   
  12. #pragma comment(lib, "hge//lib//vc//hgehelp.lib")   
  13.     
  14. HGE*                hge;                //      HGE指针   
  15. hgeSprite*                  hsplite;      //    HGE粒子精灵指针   
  16.     
  17. HTEXTURE                        htexture;       //     纹理   
  18. HEFFECT    heffect; //       音效   
  19.     
  20. HCHANNEL                        hchannel;   
  21.     
  22. const int                     HSCREEN_WIDTH = 800;   // 屏幕宽度   
  23. const int                     HSCREEN_HEIGHT = 600;  //        屏幕高度   
  24.     
  25. int                         dx,  dy;              //     粒子精灵坐标(x,y)   
  26.     
  27. //////////////////////////////////////////////////////////////////////////   
  28. //      函数描述:监听键盘方向键及SHIFT键,控制粒子移动   
  29. //////////////////////////////////////////////////////////////////////////   
  30. void ListenKeyMove()   
  31. {   
  32.         int speed = 1;   
  33.     
  34.         if (hge->Input_GetKeyState(HGEK_SHIFT)) //       按下左右SHIFT都可以加速   
  35.         {   
  36.                 speed = 5;   
  37.         }   
  38.     
  39.         if (hge->Input_GetKeyState(HGEK_LEFT))  //        按下左方向键   
  40.         {   
  41.                 dx -= speed;   
  42.                 if (dx < 0)   
  43.                 {   
  44.                         dx = HSCREEN_WIDTH;   
  45.                 }   
  46.         }   
  47.     
  48.         if (hge->Input_GetKeyState(HGEK_RIGHT)) //       按下右方向键   
  49.         {   
  50.                 dx += speed;   
  51.                 if (dx > HSCREEN_WIDTH)   
  52.                 {   
  53.                         dx = 0;   
  54.                 }   
  55.         }   
  56.     
  57.         if (hge->Input_GetKeyState(HGEK_UP))    //  按下上方向键   
  58.         {   
  59.                 dy -= speed;   
  60.                 if (dy < 0)   
  61.                 {   
  62.                         dy = HSCREEN_HEIGHT;   
  63.                 }   
  64.         }   
  65.     
  66.         if (hge->Input_GetKeyState(HGEK_DOWN))  //        按下下方向键   
  67.         {   
  68.                 dy += speed;   
  69.                 if (dy > HSCREEN_HEIGHT)   
  70.                 {   
  71.                         dy = 0;   
  72.                 }   
  73.         }   
  74. }   
  75.     
  76. //////////////////////////////////////////////////////////////////////////   
  77. //      逻辑函数   
  78. //////////////////////////////////////////////////////////////////////////   
  79. bool FrameFunc()   
  80. {   
  81.         if (hge->Input_GetKeyState(HGEK_ESCAPE))   
  82.         {   
  83.                 return true;   
  84.         }   
  85.     
  86.         if (hge->Input_GetKeyState(HGEK_SPACE))   
  87.         {   
  88.                 hchannel = hge->Effect_Play(heffect);   // 播放音效   
  89.                 hge->Channel_SetVolume(hchannel, 50);   // 设置音效大小   
  90.         }   
  91.     
  92.         //      监听方向键   
  93.         ListenKeyMove();   
  94.     
  95.         return false;   
  96. }   
  97.     
  98. //////////////////////////////////////////////////////////////////////////   
  99. //      渲染函数   
  100. //////////////////////////////////////////////////////////////////////////   
  101. bool RenderFunc()   
  102. {   
  103.         hge->Gfx_BeginScene();   
  104.     
  105.         hge->Gfx_Clear(0);            //    清屏(黑色)   
  106.     
  107.         hsplite->Render(dx, dy);        //      设置粒子显示在屏幕中点   
  108.     
  109.         hge->Gfx_EndScene();   
  110.     
  111.         return false;   
  112. }   
  113.     
  114. //////////////////////////////////////////////////////////////////////////   
  115. //      程序入口   
  116. //////////////////////////////////////////////////////////////////////////   
  117. int WINAPI WinMain(HINSTANCEHINSTANCELPSTRint)   
  118. {   
  119.         hge = hgeCreate(HGE_VERSION);   
  120.     
  121.         //      设定参数   
  122.         hge->System_SetState(HGE_TITLE, "YOYO's HGE DEMO");      //    窗体标题   
  123.         hge->System_SetState(HGE_FRAMEFUNC,     FrameFunc);    //        逻辑函数   
  124.         hge->System_SetState(HGE_RENDERFUNC, RenderFunc);       //     渲染函数   
  125.         hge->System_SetState(HGE_WINDOWED,      true);                        //      窗口显示   
  126.         hge->System_SetState(HGE_SHOWSPLASH, false);        //  关闭LOGO显示   
  127.         hge->System_SetState(HGE_USESOUND,      true);                        //      开启音效   
  128.         hge->System_SetState(HGE_ZBUFFER,       true);   //       开启Z-Buffer   
  129.         hge->System_SetState(HGE_SCREENWIDTH, HSCREEN_WIDTH);   // 设置屏幕宽度   
  130.         hge->System_SetState(HGE_SCREENHEIGHT, HSCREEN_HEIGHT); //       设置屏幕高度   
  131.         hge->System_SetState(HGE_SCREENBPP,     30);   //       设置屏幕分辨率   
  132.         hge->System_SetState(HGE_FPS,   100);                        //    设置速率   
  133.         hge->System_SetState(HGE_LOGFILE,       "log_demo.log");       //     设置日志记录文件   
  134.     
  135.         if (hge->System_Initiate())     //   获取句柄   
  136.         {   
  137.                 //      加载纹理   
  138.                 htexture = hge->Texture_Load("..//TestHGE//Res//particles.png");   
  139.     
  140.                 //      加载音效   
  141.                 heffect = hge->Effect_Load("..//TestHGE//Res//folder.wav");   
  142.     
  143.                 if (htexture == NULL || heffect == NULL)        //      如果加载不成功则退出   
  144.                 {   
  145.                         hge->System_Shutdown();   
  146.                         hge->Release();   
  147.                         return 1;   
  148.                 }   
  149.     
  150.                 //      创建粒子精灵   
  151.                 hsplite = new hgeSprite(htexture, 0, 0, 32, 32);   
  152.                 hsplite->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE);        //      设置混合模式   
  153.                 hsplite->SetHotSpot(16, 16);    //  设置粒子精灵中心点   
  154.     
  155.                 //      设置粒子精灵初始位置:屏幕中心   
  156.                 dx = HSCREEN_WIDTH/2;   
  157.                 dy = HSCREEN_HEIGHT/2;   
  158.     
  159.                 //      启动HGE   
  160.                 hge->System_Start();   
  161.     
  162.                 //      释放纹理   
  163.                 hge->Texture_Free(htexture);   
  164.     
  165.                 //      释放音效   
  166.                 hge->Effect_Free(heffect);   
  167.     
  168.                 //      删除指针   
  169.                 delete hsplite;   
  170.                 hsplite = 0;   
  171.         }   
  172.     
  173.         hge->System_Shutdown();   
  174.         hge->Release();   
  175.     
  176.         return 0;   
  177. }  

需要将HGE1.8.1的include文件夹、lib/vc文件夹、hge.dll、bass.dll拷贝到项目目录下。
另外加载纹理和音效使用了相对路径,项目名字为TestHGE,如果不一样请自己更改 = =。

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

原创粉丝点击