HGE编写游戏的心得体会
首先,HGE是一款轻量级的WIndows环境下的引擎,他能帮助我们更方便的开发WIN32的程序,由于长时间没有更新,所以慢慢被大家遗忘,但是不可否认,这款引擎对于底层函数的封装是非常有效率的。
基于以上这点感想,自己独立阅读了HGE的一些小例子,并且打算用HGE开发一个小型游戏。
如果需要在C++的程序中频繁调用某个函数的话,最好的办法是先将其封装成类,在将其做成单例模式。这种方法的好处就是随时可以在这个类以外调用它。下面写个小例子,从程序中摘抄下来的:
#include <Poco/SingletonHolder.h>
class CResourcesManager
{
public:
CResourcesManager();
~CResourcesManager();
static CResourcesManager& Instance();
};
CResourcesManager& CResourcesManager::Instance()
{
static Poco::SingletonHolder<CResourcesManager> sh;
return *sh.get();
}
这里使用了一个Poco函数库,他在内部封装好了一个单例的函数,咱们可以直接调用。
从上面的代码咱们可以看出如何设计一个单例模式。当然,其他的定义我没有截全,因为是资源管理的类,所以大家凑活看一下,也算我对C++模式下单例制作的一个记录。
下面在分享一下我封装的HGE的类,如有不足,请大家指正:
文件名:myhge.h
#include "include/hge.h"
#include"include/hgegui.h"
#define BASESCREENW 256*3
#define BASESCREENH 224*3
#define myhge MyHGE::Instance()
#define phge MyHGE::Instance().GetHGE()
class MyHGE
{
public:
MyHGE();
~MyHGE();
void SetProc(hgeCallback ff, hgeCallback rf);
void BeginRender(DWORD col);
void EndRender();
void Start();
static MyHGE& Instance();
HTEXTURE LoadTex(const char*);
void FreeTex(HTEXTURE);
HEFFECT LoadSound(const char*);
HGE* GetHGE() { return hge; };
float GetDelta();
bool GetKeyState(int k);
void welcome();
private:
MyHGE(const MyHGE&);// 不能类外调用拷贝构造与赋值操作符
MyHGE& operator = (const MyHGE&);
HGE* hge;
};
文件名:myhge.cpp
#include "myhge.h"
#include <Poco/SingletonHolder.h>
MyHGE::MyHGE()
{
hge = hgeCreate(HGE_VERSION);// 使用hgeCreate函数创建HGE接口,参数必须传递正确的HGE_VERSION,它是在hge.h中定义的
hge->System_SetState(HGE_SCREENWIDTH, BASESCREENW);//将屏幕宽度设置为800
hge->System_SetState(HGE_SCREENHEIGHT, BASESCREENH);//将屏幕高度设置为600
hge->System_SetState(HGE_TITLE, "我的第一个HGE程序");//设置窗口标题为“我的第一个HGE程序”
hge->System_SetState(HGE_WINDOWED, true);//设置使用窗口模式
hge->System_SetState(HGE_USESOUND, true);//设置不使用声音(第一个程序我们先不讲解声音和图像的知识)
hge->System_SetState(HGE_SHOWSPLASH, false); // 解除掉程序开头HGE的LOGO
}
MyHGE::~MyHGE()
{
hge->System_Shutdown();//程序停止
hge->Release();//释放HGE所占用的内存。
}
void MyHGE::SetProc(hgeCallback ff, hgeCallback rf)
{
hge->System_SetState(HGE_FRAMEFUNC, ff);//设置逻辑函数为FrameFunc函数
hge->System_SetState(HGE_RENDERFUNC, rf);//设置绘制函数为RenderFunc函数
hge->System_Initiate();
hge->Effect_Load("snowbro\\松鼠大作战.mp3");
}
void MyHGE::BeginRender(DWORD col)
{
hge->Gfx_BeginScene();
hge->Gfx_Clear(col);//以某颜色清屏,OxFF000000为透明度为0的黑色
}
void MyHGE::EndRender()
{
hge->Gfx_EndScene();
}
void MyHGE::Start()
{
hge->System_Start();//如果没有问题,则使用System_Start方法,开始程序。
}
//这里同样将HGE制作为单例模式,方便后续调用
MyHGE& MyHGE::Instance()
{
static Poco::SingletonHolder<MyHGE> sh;
return *sh.get();
}
HTEXTURE MyHGE::LoadTex(const char* fname)
{
return hge->Texture_Load(fname);
}
void MyHGE::FreeTex(HTEXTURE t)
{
hge->Texture_Free(t);
}
HEFFECT MyHGE::LoadSound(const char* fname)
{
return hge->Effect_Load(fname);
}
float MyHGE::GetDelta()
{
return hge->Timer_GetDelta();
}
bool MyHGE::GetKeyState(int k)
{
return hge->Input_GetKeyState(k);
}
以上就是我对HGE小引擎的一些使用,希望大家多多指教!
HGE编写游戏的心得体会相关推荐
- 幼儿园计算机培训家长心得体会,幼儿游戏培训心得体会5
作为一名新的老师参加了幼儿园的游戏课程角色培训,在幼儿的美术游戏活动中重结果更重过程,我们教师应给幼儿创设宽松愉快的氛围,开展具有游戏倾向的美术活动,这样才能调动幼儿的积极性.下面是小编带来的有关幼儿 ...
- Unity 游戏设计心得体会
日期:2019年5月2日 基础知识:需要掌握3dsMax建模知识与技术 关键步骤:导入模型文件,给模型添加物理属性和触发器,编辑动作导向图 脚本语言:C#或JavaScript 学习方式:制作游戏最注 ...
- java实验2总结心得,打字小游戏JAVA实验总结及心得体会
篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...
- 中国象棋程序的设计与实现(七)--心得体会和开发日志
上大学那会,还没有自己专属的SVN仓库,但是我已经意识到了管理代码的重要性,我最常用的一种需求就是恢复到上一个正确的版本. 为此,我每实现一个重要功能,就会备份整个项目一次,增加开发日志,如" ...
- 计算机vb实验感想,vb课程设计心得体会范文(精选3篇)
vb课程设计心得体会范文(精选3篇) 当我们受到启发,对学习和工作生活有了新的看法时,就十分有必须要写一篇心得体会,这样可以不断更新自己的想法.那么你知道心得体会如何写吗?下面是小编为大家收集的vb课 ...
- 做python的心得体会_实训python的心得体会
如何学习Python的一些总结 C++.Java乃至C#都可以看做是同一类型的语言:C++还算灵活,但纷繁复杂的语法使得生产效率低下,Java提高了生产效率,却损失了灵活性;C#算是在生产效率和灵活性 ...
- linux实训心得体会范文
linux实训心得体会范文 当我们有一些感想时,就十分有必须要写一篇心得体会,这样我们可以养成良好的总结方法.相信许多人会觉得心得体会很难写吧,以下是小编精心整理的linux实训心得体会范文,供大家参 ...
- java类与对象实验报告心得体会_java上机实验心得体会报告(大全五篇)
北京联合大学信息学院 "面向对象程序设计"课程上机实验报告 题目: JAVA上机实验心得体会 姓名(学号): 专业:计算机科学与技术 编制时间: 2012年12月19日 版本: 1 ...
- linux环境搭建实践总结,linux实习心得体会
linux实习心得体会 linux实习心得体会1 学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者 ...
最新文章
- PyCharm 使用技巧
- 马云出 1000 亿做阿里达摩院:产品卖到全球了,他说科学研究也要跟上
- python简笔画绘制 数据驱动绘图恐龙_使用python turtle绘制简笔画大白-Go语言中文社区...
- java 内存空间_怎样用java实现存储空间动态分配
- hibernate学习和各种关系总结
- java listeners_Java ActionListeners
- Silverlight 属性样式、控件模板、视觉状态
- unity android适配,unity实战 手机屏幕适配
- python自助电影售票机_Spring Cloud版——电影售票系统六使用 Spring Cloud Config 统一管理微服务配置...
- 现在农村有比较多老了的丝瓜,这些老了的丝瓜有什么作用吗?
- Media Player Classic - HC 源代码分析 6:MediaInfo选项卡 (CPPageFileMediaInfo)
- [导入]一个Form验证的方案
- Cadence Allegro Segments Over Voids 功能介绍图文教程
- matplotlib 设置中文字体
- 做数据分析,一定会用到的12类实用图表
- 简单融合双系统 苹果虚拟Win8实用技巧
- Linux c 地址空间 堆栈 数据段 代码段 变量存储位置
- Excel 学习心得2
- Android图像处理(五)镜像、倒影、drawBitmapMesh实现旗帜飘扬效果
- Leetcode_6_Dynamic Programming_198,213打家劫室,打家劫室II
热门文章
- MAP实现一个key,对应多个Value值。
- LINUX内核编译选项-5
- HDMI2.0RE驱动控制方案AG7120和AG7220性能参数对比
- 华为机考108题(c++)(101-108)
- 【fragment】Android Fragments 详细使用
- 对比度亮度图像增强及convertTo详解
- 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真
- 关于iPhone X下Home Indicator(白条)的隐藏和延迟响应
- 【Soul】用户运营策略分析报告
- Python flask入门