首先,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编写游戏的心得体会相关推荐

  1. 幼儿园计算机培训家长心得体会,幼儿游戏培训心得体会5

    作为一名新的老师参加了幼儿园的游戏课程角色培训,在幼儿的美术游戏活动中重结果更重过程,我们教师应给幼儿创设宽松愉快的氛围,开展具有游戏倾向的美术活动,这样才能调动幼儿的积极性.下面是小编带来的有关幼儿 ...

  2. Unity 游戏设计心得体会

    日期:2019年5月2日 基础知识:需要掌握3dsMax建模知识与技术 关键步骤:导入模型文件,给模型添加物理属性和触发器,编辑动作导向图 脚本语言:C#或JavaScript 学习方式:制作游戏最注 ...

  3. java实验2总结心得,打字小游戏JAVA实验总结及心得体会

    篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...

  4. 中国象棋程序的设计与实现(七)--心得体会和开发日志

    上大学那会,还没有自己专属的SVN仓库,但是我已经意识到了管理代码的重要性,我最常用的一种需求就是恢复到上一个正确的版本. 为此,我每实现一个重要功能,就会备份整个项目一次,增加开发日志,如" ...

  5. 计算机vb实验感想,vb课程设计心得体会范文(精选3篇)

    vb课程设计心得体会范文(精选3篇) 当我们受到启发,对学习和工作生活有了新的看法时,就十分有必须要写一篇心得体会,这样可以不断更新自己的想法.那么你知道心得体会如何写吗?下面是小编为大家收集的vb课 ...

  6. 做python的心得体会_实训python的心得体会

    如何学习Python的一些总结 C++.Java乃至C#都可以看做是同一类型的语言:C++还算灵活,但纷繁复杂的语法使得生产效率低下,Java提高了生产效率,却损失了灵活性;C#算是在生产效率和灵活性 ...

  7. linux实训心得体会范文

    linux实训心得体会范文 当我们有一些感想时,就十分有必须要写一篇心得体会,这样我们可以养成良好的总结方法.相信许多人会觉得心得体会很难写吧,以下是小编精心整理的linux实训心得体会范文,供大家参 ...

  8. java类与对象实验报告心得体会_java上机实验心得体会报告(大全五篇)

    北京联合大学信息学院 "面向对象程序设计"课程上机实验报告 题目: JAVA上机实验心得体会 姓名(学号): 专业:计算机科学与技术 编制时间: 2012年12月19日 版本: 1 ...

  9. linux环境搭建实践总结,linux实习心得体会

    linux实习心得体会 linux实习心得体会1 学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者 ...

最新文章

  1. PyCharm 使用技巧
  2. 马云出 1000 亿做阿里达摩院:产品卖到全球了,他说科学研究也要跟上
  3. python简笔画绘制 数据驱动绘图恐龙_使用python turtle绘制简笔画大白-Go语言中文社区...
  4. java 内存空间_怎样用java实现存储空间动态分配
  5. hibernate学习和各种关系总结
  6. java listeners_Java ActionListeners
  7. Silverlight 属性样式、控件模板、视觉状态
  8. unity android适配,unity实战 手机屏幕适配
  9. python自助电影售票机_Spring Cloud版——电影售票系统六使用 Spring Cloud Config 统一管理微服务配置...
  10. 现在农村有比较多老了的丝瓜,这些老了的丝瓜有什么作用吗?
  11. Media Player Classic - HC 源代码分析 6:MediaInfo选项卡 (CPPageFileMediaInfo)
  12. [导入]一个Form验证的方案
  13. Cadence Allegro Segments Over Voids 功能介绍图文教程
  14. matplotlib 设置中文字体
  15. 做数据分析,一定会用到的12类实用图表
  16. 简单融合双系统 苹果虚拟Win8实用技巧
  17. Linux c 地址空间 堆栈 数据段 代码段 变量存储位置
  18. Excel 学习心得2
  19. Android图像处理(五)镜像、倒影、drawBitmapMesh实现旗帜飘扬效果
  20. Leetcode_6_Dynamic Programming_198,213打家劫室,打家劫室II

热门文章

  1. MAP实现一个key,对应多个Value值。
  2. LINUX内核编译选项-5
  3. HDMI2.0RE驱动控制方案AG7120和AG7220性能参数对比
  4. 华为机考108题(c++)(101-108)
  5. 【fragment】Android Fragments 详细使用
  6. 对比度亮度图像增强及convertTo详解
  7. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真
  8. 关于iPhone X下Home Indicator(白条)的隐藏和延迟响应
  9. 【Soul】用户运营策略分析报告
  10. Python flask入门