Liny_@NotePad

沉迷ACG中

HGE基本DEMO

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

一个简单的显示粒子纹理图片、播放音效的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\\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(HINSTANCE, HINSTANCE, LPSTR, int)
  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目录下。


登录 *


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