HGE系列之一 初窥门道

本文介绍了HGE(Haaf's Game Engine),一款专注于2D游戏开发的免费开源游戏引擎。文章详细阐述了HGE的特点与优势,包括硬件加速支持、广泛的文档支持、免费与开源特性等,并提供了一个简单的示例程序帮助读者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

HGE系列之一    初窥门道

 

  对于游戏开发有些兴趣的朋友,尤其是那些至今都扔不下2D、如我这般的志士同仁,想必对于HGE都有所耳闻,但如果要论及深入了解与运用,那恐怕就寥寥无几人了,而对于那些压根就未有听说过HGE名号的人士,就更无论什么知晓或是精通了。而我,一个对游戏编程颇有兴致的平庸之辈,恰好在某次网上混迹期间了解到了HGE这个名词,接着也顺势了解了一些有关HGE的零星知识,遂感觉有些话儿想拿出来分享分享,正好网上有关HGE的信息比较缺失( 不信可以Google一下 :) ),在此我也顺便尽尽薄力,稍稍补缀一下这个缺口,同时也助长一番自己对于HGE的认识,想来真是幸甚至哉啊 :)

 

  好了好了,打住我这番无聊说辞,让我们马上进入正题,首先的首先呢,我想你可能仍然迷惑:HGE到底是个什么东西?不用着急,让我们首先到HGE的官网上去看看:http://hge.relishgames.com,进入之后我想你第一眼就该瞧见HGE最新版的下载提示(目前最新版本为1.81),以及上面赫然的HGE的全称:Haaf’s Game Engine (Hardware Accelerated 2D Game Engine) ! 至此我想你终于知晓了HGE其实就是一款游戏引擎,而且是一款支持硬件加速的2D游戏引擎!( 所谓的硬件加速,听来玄乎,其实是HGE使用了DirectX作为底层的缘故 )

 

  好了,第一个问题算是解决了,那么接下来,你可能会问:为什么我要使用这款名为HGE的游戏引擎 答案可能很难说清,毕竟世界上优秀的游戏引擎太多了,如果硬要说出些门道来的话,我想可能有以下几个方面:1. 由于HGE构建于DirectX之上,所以其能够较好的支持硬件加速,并运行于安装有DirectX( 确切的说是DirectX 8.0 )的所有Win32平台上;2. HGE拥有较为完善的文档支持,并且HGE小组随时准备处理你的任何反馈;3. HGE是免费的,并且从1.7版本起便开始开源,而其发布在zlib/libpng许可证之下的特性,使他能够完全免费的提供给任何的使用者包括商业用户(不过其音频部分由于使用了BASS库,所以商业用户不能免费使用(音频部分)…4. 本人认为的最突出的优点:由于HGE专注于2D游戏的开发,并且在引擎设计编码上秉承了KISS原则,从不贸然添加一些华而不实的内容,所以使得HGE接口简单并且易于扩展,而且非常稳定!

 

  那么,第二个问题算是过了,而你接下来的问题可能就是:那我怎么使用它呢?哈哈,这个问题太简单了:马上下载HGE最新版本,然后在你的IDE中添加必要的头文件和动态链接库,接着参照其文档和示例程序进行简单的“第一次亲密接触”,再然后的深入则可能要各类书籍和Google先生的帮忙了,不过呢一切就是这么简单 :)

 

  这里我就简单的列出HGE提供的最简单的一个程序示例,其中的注释我想应该足以说明一切了 :)

 

// 需要包含的头文件

#include "../../include/hge.h"

 

// HGE全局变量指针

HGE *hge = 0;

 

// 每一帧HGE都会调用这个函数,所以

// 请在此编写你的游戏循环代码. 不过在这个示例中

// 我们只是检查了是否按下了ESC

 

bool FrameFunc()

{

       // 如果此函数返回TRUE,则表示

       // 停止应用程序的执行

 

// 调用Input_GetKeyState函数获取键盘按键情况

// 其中HGEK_ESCAPEHE自定义的虚拟键码

       if ( hge->Input_GetKeyState(HGEK_ESCAPE) ) return true;

 

       // 如果没有按下ESC键则继续执行,即返回FALSE

       return false;

}

 

//标准的WinMain函数

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

       // 再此我们使用了全局变量指针hge来指向创建的HGE实例.

       // 不过你可以随时调用hgeCreate函数来获取对于HGE的访问

       // 但是一定要保证每次对于hgeCreate的访问都调用Release函数     

// 进行释放。( HGE在此其实是使用了一个简单的引用计数 :)

       hge = hgeCreate(HGE_VERSION);

 

       // 设置我们程序的帧函数,即先前编写的FrameFunc函数

// 调用System_SetState函数,第一参数为HGE自定义的

// 状态函数枚举值,在此为HGE_FRAMEFUNC,表明设置

// 的是帧函数,第二参数便自然是相应的函数指针

       hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);

 

       // 设置窗口标题

       hge->System_SetState(HGE_TITLE, "HGE Tutorial 01 - Minimal HGE application");

      

       // 设置是否运行在窗口模式下

       // 默认的窗口大小为800x600

       hge->System_SetState(HGE_WINDOWED, true);

 

       // 设置是否使用BASS库播放音频(由于版权问题

// 在此未使用BASS库,这也意味着你必须自己编写

// 播放音频的代码

       hge->System_SetState(HGE_USESOUND, false);

 

       // 调用System_Initiate函数尝试以

// 上面设置的各种状态初始化系统.

       // 如果出现了错误该函数便返回FALSE

       // 并且你可以调用System_GetErrorMessage函数

    // 来获取具体的错误信息

       if(hge->System_Initiate())

       {

              // 调用System_Start函数开始运行上面设置的FrameFunc函数.

              // 并且只要FrameFunc不返回TRUE便一直在此循环

              hge->System_Start();

       }

       else

       {    

              //如果System_Initiate函数初始化失败便调用最简单的MessageBox

MessageBox(NULL, hge->System_GetErrorMessage(), "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);

       }

 

       // 程序至此已经退出

 

       // 调用System_Shutdown函数释放各类资源并关闭系统

       hge->System_Shutdown();

 

       // 释放HGE,与先前的hgeCreate函数对应.

       hge->Release();

 

       return 0;

}

 

啊哈,第一个HGE程序就这么简单的完成了,马上点击你IDE的编译按钮,然后义无反顾的运行吧,看看你到底搞出了个什么东西 :)

 

好了,第一次的HGE简介就到此为止吧,说实话,我也不知道我上面到底说了些什么东西( Oh,My God! ),不过对于HGE的其他内容,如高端一些的使用或者是其实现的源码,以后有时间一定一一奉上,大家一起学习嘛,这不正如刘未鹏大牛所言:书写是一种更好的学习!不过现在,我得说:下次再见喽 :)

 

基本功能和翎风的一样。 ------------------------------------------------------------------ [2016.09.30] 更新M2功能 ------------------------------------------------------------------ 1.增加脚本命令:InSafeZone //检测人物是否在安全区 ------------------------------------------------------------------ 2.修改程序防止最新僵尸攻击 3.增加脚本命令:SETRANDOMNO //产生一个随机数字 [@main] #IF #ACT SETRANDOMNO //产生一个随机数字 #SAY : //将显示出产生的随机数 [@@CHECKNO] #IF CHECKRANDOMNO //检测输入的验证码是否正确 #ELSEACT MESSAGEBOX 验证码错误! CLOSE BREAK 4.增加脚本命令:ISONMAP MAP //检测当前人是否在MAP地图上 5.增加脚本命令:DELAYCALL 作用:延时执行同一个NPC脚本中指定的标签内容 格式:DELAYCALL S LABEL 其中S是延时秒数(毫秒),Label是执行的脚本标签 示例:DelayCall 3000 @DELAYCALLTEST --- 3秒后自动跳到@DELAYCALLTEST节执行 6.增加脚本命令:KILLBYMON //是否被怪杀 7.增加脚本命令:KILLBYHUM //是否被人杀 地图增加一参数:KILLFUNC(X) //X可以随意数字 说明: 人物在该地图杀人,将触发QFunction-0.txt的[@KillPlay数字]节 人物在该地图杀怪,将触发QFunction-0.txt的[@KillPlayMon数字]节 注:宝宝杀人杀怪有效(秒杀除外) 8. //杀人的怪物名字 9. //杀人的人物名字 #IF KILLBYMON SENDMSG 5 在:%m(%x:%y)把干掉了! #IF KILLBYHUM SENDMSG 5 在:%m(%x:%y)把干掉了! 10.增加人物S变量:(0~99个) 11.解决地图标记 NoHUMNoMon 有人刷怪不能用的问题! 12.增加NPC命令:REPAIRALL //特修身上所有装备 13.增加数据库(修复神水)设置:3 14 //特修身上所有装备 14.增加脚本命令:ISGROUPMASTER //检测是否组长,加入编组后组长会触发QFunction-0.txt 15.增加挂机泡点功能。 ===================================== OFFLINE S EXP S是时间,单位秒 EXP为每S秒得到的经验值 默认必须在安全区域有效 脚本示意: (******************************************************************) (@@offlinemsg) [@main] 一、点击开始脱机泡点后,可输入一段留言信息给你的朋友。\ \ \ \ [@@offlinemsg] #IF CHECKLEVEL > 0 #ACT OFFLINE 5 500 //每5秒增加500经验 --------------------------------------------------------------------------- 16.;检测是否组长 [@MAIN] #IF ISGROUPMASTER #ACT GroupMoveMap 3 330 330 #elsesay 你不是组长. 加入编组后组长会触发QFunction-0.txt [@GroupCreate] #if #say 加入编组 --------------------------------------------------------------------------- 17.增加脱机泡点功能 18.增加地图标记有人刷怪 [0 比奇] NoHUMNoMon ;有人才开始刷怪 19.增加地图标记禁止仍背包物品 [1 沃玛森林] NOTHROWITEM ;禁止仍背包物品 20.增加地图标记死后不爆背包物品 [2 毒蛇山谷] NODR
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值