- 浏览: 227980 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wahahachuang8:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
Comet初步研究与实践 – PHP到C#应用程序的数据推送DEMO -
xiaoshu666:
博主能不能把你测试工程的代码发上来看看啊。我怎么运行起来没反应 ...
.NET下WebBrowser的一个BUG以及其替代品——geckofx -
huangkai1729:
您好,您这个dealString方法中有个runtime = ...
java简单封装ffmpeg -
wangyanqiu02:
呵呵,幽默风趣思想深邃的对话
一段我和同学有意思的争论 -
nogocn:
你小学时,我大学。一样人成长过程。。。我岁数在你前,现在在学你 ...
闲话,我的编程小历史
HGE游戏引擎是一个开源2D游戏引擎,基于directX。
它的渲染及逻辑是基于帧回调的框架模式,
其提供一些基本的图像操作和输入控制功能。
我在之前写一个2D游戏的时候对它整个框架进行了一次封装,很多地方写得比较恶心,请原谅我在变量上命名的不规范。
在此分享出来,主要可以参考一下大体框架吧。
HGE游戏引擎基于帧的回调让我很不爽,因为咱的游戏逻辑一般是连续的,跟具体帧无关,所以我把整个HGE跑在自己的一个线程之中。我的游戏逻辑部分通过发消息,通知界面更新 以及获取用户输入。
在HGE的主框架下分四个部分
1. 资源管理 2.消息管理 3.声音管理 4.UI管理
下面是GDE_UI_HGEFramework.h
/* * CopyRight 2009 - 2010 GDE工作室 * 游戏UI系统 - HGE 引擎框架类 * =================================== * 整个UI系统调用HGE游戏引擎的主框架 * * 2010/01/08 cg create */ #ifndef GDE_UI_HGE_FRAMEWORK_H_ #define GDE_UI_HGE_FRAMEWORK_H_ #include "GDE_UI_ResourceManager.h" #include "GDE_UI_UIManager.h" #include "GDE_UI_MessageManager.h" #include "GDE_UI_SoundManager.h" #pragma comment(lib,"GDE_UI/HGE/lib/hge.lib") #pragma comment(lib,"GDE_UI/HGE/lib/hgehelp.lib") #pragma comment(linker, "/NODEFAULTLIB:libc.lib") #include "GDE_UI_thread_core.h" namespace GDE { namespace GDE_UI { //HGE引擎框架 class HGE_Framework { public: //唯一实例 static HGE_Framework* Instance() { static HGE_Framework* instance_ = 0; if( !instance_ ) { instance_ = new HGE_Framework(); } return instance_; } ~HGE_Framework() { delete m_ResManager; delete m_MessageManager; delete m_SoundManager; delete m_UIManager; } //开始运行 void Run() { //获取资源指针 pHGE = m_ResManager->GetHGEPtr(); pGUI = m_ResManager->GetGuiPtr(); //初始化子类中的HGE核心指针 m_MessageManager->Ready(); m_UIManager->Ready(); //开始主循环 if(pHGE->System_Initiate() && pHGE) { pHGE->System_Start(); } else MessageBox(NULL, pHGE->System_GetErrorMessage(), "Error", MB_OK | MB_ICONERROR | MB_SYSTEMMODAL); } //HGE框架逻辑函数 static bool FrameFunc() { SMART_LOCK( 0 )//线程锁 HGE_Framework::Instance()->m_MessageManager->ProcessMessage();//处理消息 HGE_Framework::Instance()->m_UIManager->Handler();//处理用户操作 return FALSE; } //HGE框架渲染函数 static bool RenderFunc() { SMART_LOCK( 0 )//线程锁 HGE_Framework::Instance()->pHGE->Gfx_Clear(0); //清屏 HGE_Framework::Instance()->pHGE->Gfx_BeginScene(); //开始渲染 HGE_Framework::Instance()->m_UIManager->Render();//绘制 HGE_Framework::Instance()->pHGE->Gfx_EndScene(); //结束渲染 return FALSE; } //成员子管理器指针 ResourceManager* m_ResManager; MessageManager* m_MessageManager; SoundManager* m_SoundManager; UIManager* m_UIManager; //HGE系统相关资源指针 HGE* pHGE; hgeGUI* pGUI; private: //私有构造,不允许实例化 HGE_Framework() :pHGE(0) ,pGUI(0) { m_ResManager = new ResourceManager(); m_MessageManager = new MessageManager(); m_SoundManager = new SoundManager(); m_UIManager = new UIManager(); } }; } } #endif;
资源管理类,下面给出
GDE_UI_ResourceManager.h
/* * CopyRight 2009 - 2010 GDE工作室 * 游戏UI系统 - HGE 引擎框架类 - 资源管理器 * =================================== * HGE引擎资源管理类 * * 本类的资源主要实现对HGE资源的维护 和对HGE API封装提供工具集 * 并维护HGE的配置环境 * * 2010/01/08 cg create */ #ifndef GDE_UI_FRAMEWORK_RESOURCEMANAGER_H_ #define GDE_UI_FRAMEWORK_RESOURCEMANAGER_H_ #include "./HGE/cn/GfxFont.h" #include "./HGE/cn/GfxEdit.h" #include "./HGE/include/hge.h" #include "./HGE/include/hgegui.h" #include "./HGE/include/hgeguictrls.h" #include "./HGE/include/hgeresource.h" #include <string> namespace GDE { namespace GDE_UI { //资源管理类 class ResourceManager { public: //构造函数,加载HGE全局资源 ResourceManager(); //析构函数,释放HGE全局资源 ~ResourceManager(); //获取HGE指针 HGE* GetHGEPtr() { return pHGE; } //获取GUI指针 hgeGUI* GetGuiPtr() { return pGUI; } //读取图片 void LoadImage( std::string const& filename, hgeSprite*& p_sprite, HTEXTURE& tex ); private: HGE* pHGE; hgeGUI* pGUI; hgeResourceManager m_HgeResManager; }; } } #endif
GDE_UI_ResourceManager.cpp
#include "GDE_UI_HGEFramework.h" #include "GDE_UI_ResourceManager.h" namespace { std::string const RES_MANAGER_FILENAME = "res/res_s"; int const WIN_SCREENWIDTH = 800; int const WIN_SCREENHEIGHT = 600; std::string const WIN_TITILE = "HGE TEST WINDOW"; int const WIN_COLORMODE = 32; int const WIN_MAXFPS = 100; int const WIN_WINDOWED = true; } namespace GDE { namespace GDE_UI { //构造函数 ResourceManager::ResourceManager() : m_HgeResManager( RES_MANAGER_FILENAME.c_str() ) { //建立HGE全局实例 pHGE = hgeCreate(HGE_VERSION); //初始化配置 pHGE->System_SetState(HGE_INIFILE, "hgedemo.ini"); pHGE->System_SetState(HGE_LOGFILE, "hgedemo.log"); pHGE->System_SetState(HGE_FRAMEFUNC, &HGE_Framework::FrameFunc); pHGE->System_SetState(HGE_RENDERFUNC, &HGE_Framework::RenderFunc); pHGE->System_SetState(HGE_TITLE, WIN_TITILE.c_str()); pHGE->System_SetState(HGE_SCREENWIDTH, WIN_SCREENWIDTH); pHGE->System_SetState(HGE_SCREENHEIGHT, WIN_SCREENHEIGHT); pHGE->System_SetState(HGE_SCREENBPP, WIN_COLORMODE); pHGE->System_SetState(HGE_FPS,WIN_MAXFPS); pHGE->System_SetState(HGE_WINDOWED, WIN_WINDOWED); pHGE->System_SetState(HGE_HIDEMOUSE, false); pHGE->System_SetState(HGE_USESOUND, false); pHGE->System_SetState(HGE_DONTSUSPEND, true);//失去焦点不挂起 pHGE->System_SetState((hgeIntState)14, (int)0xFACE0FF); //禁用HGE LOGO //初始化GUI pGUI = new hgeGUI(); pGUI->SetNavMode(HGEGUI_UPDOWN | HGEGUI_CYCLED); pGUI->Enter(); } ResourceManager::~ResourceManager() { // 销毁gui delete pGUI; // 销毁资源管理器 m_HgeResManager.Purge(); // HGE结束 pHGE->System_Shutdown(); pHGE->Release(); } void ResourceManager::LoadImage( std::string const& filename, hgeSprite*& p_sprite, HTEXTURE& tex ) { if( p_sprite ) delete p_sprite; //销毁之前的图片 tex = pHGE->Texture_Load( filename.c_str() ); //装载纹理 int w = pHGE->Texture_GetWidth( tex ); int h = pHGE->Texture_GetHeight( tex ); p_sprite = new hgeSprite( tex, 0, 0, w, h ); //剪裁精灵 } } }
比较重要的是消息传递机制,我仿照了MFC的消息宏定义机制,下面给出消息模块的核心代码
//消息映射宏定义 #define BEGIN_MESSAGE_MAP()\ typedef void (MessageManager::*MessageFunction)();\ std::map<UIMessage, MessageFunction> message_functions_;\ void InitMessageMap()\ { #define ON_MESSAGE( ID, memberFuc )\ message_functions_[ID] = &MessageManager::memberFuc; #define END_MESSAGE_MAP\ } .... //这里是我游戏中具体的一些消息 //消息类型 typedef int UIMessage; UIMessage const UIMessage_UpdateBackImg = 0; //更新背景图片 UIMessage const UIMessage_AddRole = 10; //增加角色 UIMessage const UIMessage_RemoveRole = 11; //删除角色 UIMessage const UIMessage_UpdateRole = 12; //更新角色列表 UIMessage const UIMessage_AttackInfo = 13; //角色掉血显示 UIMessage const UIMessage_UpdateDialog = 20; //更新对话框 UIMessage const UIMessage_HideDialog = 21; //隐藏对话框 UIMessage const UIMessage_UpdateSmallMap = 30; //更新小地图 UIMessage const UIMessage_UpdateGameInfo = 40; //更新游戏提示信息 UIMessage const UIMessage_UpdateButton = 50; //增加按钮 UIMessage const UIMessage_RemoveButton = 51; //删除按钮 UIMessage const UIMessage_RemoveAllButtons = 52; //移除所有按钮 UIMessage const UIMessage_UpdatePopMenu = 60; //弹出菜单 UIMessage const UIMessage_HidePopMenu = 61; //隐藏弹出菜单 UIMessage const UIMessage_UpdateZoneBlock= 70; //更新地图块 UIMessage const UIMessage_HideZoneBlock = 71; //清除地图块 //消息映射实现 BEGIN_MESSAGE_MAP() ON_MESSAGE( UIMessage_UpdateBackImg, UpdateBackImage ) ON_MESSAGE( UIMessage_AddRole, AddRole ) ON_MESSAGE( UIMessage_RemoveRole, RemoveRole ) ON_MESSAGE( UIMessage_UpdateRole, UpdateRole ) ON_MESSAGE( UIMessage_AttackInfo, RoleAttackInfo ) ON_MESSAGE( UIMessage_UpdateDialog, UpdateDialog ) ON_MESSAGE( UIMessage_HideDialog, HideDialog ) ON_MESSAGE( UIMessage_UpdateSmallMap, UpdateSmallMap ) ON_MESSAGE( UIMessage_UpdateGameInfo, UpdateGameInfo ) ON_MESSAGE( UIMessage_UpdateButton, UpdateButton ) ON_MESSAGE( UIMessage_RemoveButton, RemoveButton ) ON_MESSAGE( UIMessage_RemoveAllButtons, RemoveAllButtons ) ON_MESSAGE( UIMessage_UpdatePopMenu, UpdatePopMenu ) ON_MESSAGE( UIMessage_HidePopMenu, HidePopMenu ) ON_MESSAGE( UIMessage_UpdateZoneBlock, UpdateZoneBlock ) ON_MESSAGE( UIMessage_HideZoneBlock, HideZoneBlock ) END_MESSAGE_MAP() //处理消息 void ProcessMessage() { for( int i = 0; i < m_MessageList.size(); ++i ) { ( this->*message_functions_[m_MessageList[i]] )(); } m_MessageList.clear(); }
最后是整个HGE引擎启动的方式
GDE_UI_HGE.h
#ifndef GDE_UI_HGE_H_ #define GDE_UI_HGE_H_ #include <windows.h> #include <string> #include "GDE_UI_HGEFramework.h" /* GDE HGE游戏引擎模块 2009-11-21 var | author | brief ================================================ 1.0 cg create */ namespace GDE { namespace GDE_UI { //HGE线程入口 static DWORD WINAPI HGEThreadProc(LPVOID lpParameter) { HGE_Framework::Instance()->Run(); return 0; } } } #endif
游戏初始化的时候
//创建hge线程
hge_thread = CreateThread( NULL, 0,
HGEThreadProc, NULL, 0, NULL );
就可以了
发表评论
-
一次失败的总结,HGE引擎该如何用?
2010-08-27 13:09 3953大概三个月前,我在试着用几款2D游戏引擎。 第 ... -
C++类的静态成员函数在多线程的工作机制以及运行过程中强制结束线程实验
2010-08-27 13:07 1951当时为了测试类的静态成员函数在多线程的工作机制以及运行过程中强 ... -
C++子结构间接自杀实验
2010-08-27 13:06 721之前在写一个TCP/UDP通信程序的时候, 我想试验这样一个结 ... -
HGE引擎GUI对象的扩展
2010-08-27 13:05 1864HGE引擎提供一个基本 ... -
一个简单的游戏引擎核心状态机的C++实现
2010-08-27 13:04 2383这个是我之前做的一个2D游戏(未完成)中的一部分, 实现的整 ... -
SDL小尝试,是男人就坚持20秒
2010-08-27 13:03 1123今天在电脑里掏出来自己以前试着使用SDL游戏引擎的时候做的一个 ... -
一个基于socket的资源共享平台的实现(四)
2010-08-27 13:01 816现在我们的整个系统基本可用了,还缺少什么? —— 客户端自动 ... -
一个基于socket的资源共享平台的实现(三)
2010-08-27 13:01 727需要共享资源,则需要探测本地资源分布情况。 此处我们用的算法 ... -
一个基于socket的资源共享平台的实现(二)
2010-08-27 13:00 810继续上次说的,其实任务调度宏观上普遍分为两种,实现上总的来说就 ... -
一个基于socket的资源共享平台的实现(一)
2010-08-27 13:00 719前段时间和朋友一起做了一个类似于电驴、迅雷 + MSN工具的毛 ... -
WIN平台下应用程序利用批处理更新自身
2010-08-27 12:56 763今天又碰到需要做一个简单的自动升级的客户端程序, 客户端程序 ... -
C++模板元编程
2010-08-27 12:56 1157昨天WL发给我一段我觉 ... -
VC编写windows服务程序
2010-08-27 11:48 4674昨天一同学入职考核,需要用C/C++写一个服务程序,从XML读 ...
相关推荐
本文将对HGE游戏引擎的源码进行深入解析,帮助读者理解其核心概念和工作原理。 首先,HGE的核心组件主要包括以下几个部分: 1. **图形渲染**:HGE使用Direct3D作为图形后端,提供2D渲染功能。源码中的`hgeGraphics...
描述中提到,“本游戏采用hge游戏引擎,在net2003上开发的一款小游戏”。这揭示了两个关键信息:一是游戏的编程语言环境——.NET Framework 2.0,这是微软在2003年发布的一个版本,支持C#、VB.NET等编程语言。二是...
HGE(HGE -Harnessing the Grey Matter)就是这样一款强大的2D游戏引擎,以其轻量级、高效能和易于上手的特点受到众多游戏开发爱好者的青睐。本文将通过分析基于HGE的“连连看”游戏源码,深入解析HGE引擎的工作原理...
HGE 是一个硬件加速(Hardware accelerated)的 2D 游戏引擎(Game Engine),HGE 是一个富有特性的中间件,可以用于开发任何类型的 2D 游戏。HGE 封装性良好,以至于你仅仅需要关系游戏逻辑(Game Logic),而不...
HGE 是一个硬件加速(Hardware accelerated)的 2D 游戏引擎(Game Engine), HGE 是一个富有特性的中间件,可以用于开发任何类型的 2D 游戏。HGE 封装性良好, 以至于你仅仅需要关系游戏逻辑(GameLogic),而...
hge16是一款基于DirectX的游戏引擎,它专为2D游戏制作设计,通过封装3D技术来实现高效的2D渲染效果。这个引擎的核心在于将复杂的3D图形处理转化为对2D场景的简便操作,为开发者提供了强大的工具集,简化了游戏开发...
### HGE游戏引擎使用知识点详解 #### 一、HGE引擎简介 HGE(HGE Game Engine)是一款专为2D游戏设计的硬件加速引擎,它具有良好的封装性,允许开发者更加关注游戏逻辑而非底层技术细节。HGE构建在DirectX 8.0之上...
易语言HGE引擎模块是一款专为易语言设计的游戏开发组件,它基于开源的HGE(Happy Game Engine)引擎进行了封装,使得易语言用户能够更方便地进行2D游戏的开发和商业化运作。HGE是一个高效、简洁且功能丰富的C++游戏...
HGE 是一个硬件加速(Hardware accelerated)的 2D 游戏引擎(Game Engine),HGE 是一个富有特性的中间件,可以用于开发任何类型的 2D 游戏。HGE 封装性良好,以至于你仅仅需要关系游戏逻辑(Game Logic),而不...
《HGE游戏cpp BattleShips2.0:利用HGE引擎构建的小型游戏解析》 在游戏开发领域,选择合适的引擎至关重要。HGE(Happy Game Engine)是一个基于C++的开源游戏开发框架,专为小型游戏设计,提供了一系列的游戏开发...
【打砖块游戏(使用hge引擎开发)】 在游戏开发领域,打砖块是一款经典的休闲游戏,以其简单易...如果你对游戏开发感兴趣,学习这个项目不仅可以深入了解HGE引擎的用法,也能提高你在C++编程和2D游戏设计上的技能。
Direct9游戏开发封闭引擎HGE,全称是Half-Life Game Engine,是一款基于Microsoft DirectX 9技术的游戏开发框架。它为开发者提供了一套便捷的接口,用于简化游戏编程过程,使得开发者能够更加专注于游戏内容的创作,...
本文将详细介绍一个特别的项目——"HGE引擎 分装了 lua 工程源代码",这是一个在Windows 7环境下,使用Visual Studio 2010开发的项目,它成功地将HGE引擎与Lua脚本语言进行了集成,为开发者提供了更强大的游戏开发...
在游戏开发领域,HGE(Hardcore Game Engine)是一个针对2D游戏设计的开源引擎,它为开发者提供了丰富的功能和工具,以简化游戏的创建过程。HGE的主要优点在于其简洁的API,使得程序员能够快速地实现游戏逻辑。本文...
HGE 是一个硬件加速(Hardware accelerated)的2D 游戏引擎(Game Engine), HGE 是一个富有特性的中间件,可以用于开发任何类型的2D 游戏。HGE 封装性良好, 以至于你仅仅需要关系游戏逻辑(Game Logic),而不...
标题 "HGE整合到MFC中" 涉及到的是将HGE(Hybrid Game Engine)游戏引擎集成到Microsoft Foundation Class(MFC)框架下的技术。MFC是微软提供的一种C++类库,用于简化Windows应用程序开发,而HGE则是一个开源的游戏...
HGE粒子编辑器,全称为HappyGameEngine(HGE)粒子编辑器,是一款专为HGE游戏引擎设计的强大工具,用于制作粒子封装(psi)文件。它以可视化界面为核心,为开发者提供了便捷的方式来创建和编辑各种复杂的粒子效果,...
HGE(Hardware-accelerated Game Engine)是一款专为2D游戏设计的硬件加速游戏引擎,它封装了底层DirectX API,使得开发者可以更加关注游戏逻辑而非底层实现细节。HGE的特点包括: - **专注2D领域**:HGE特别针对2D...
标题中的“HGE DX9”指的是“High Gear Engine DirectX 9”,这是一个专为游戏开发设计的跨平台开源库。HGE是基于DirectX 9.0 API构建的,提供了简化的游戏编程接口,使得开发者能够更方便地创建2D游戏和其他交互式...
将HGE内嵌到MFC程序中,可以充分利用两者的优势,创建出既有MFC强大框架支持,又具有HGE高效游戏引擎特性的应用。 首先,我们要理解MFC的消息循环。在MFC中,消息循环是程序运行的核心,它负责接收并处理来自操作...