首先,HGE是一款轻量级的WIndows环境下的引擎,他能帮助我们更方便的开发WIN32的程序,由于长时间没有更新,所以慢慢被大家遗忘,但是不可否认,这款引擎对于底层函数的封装是非常有效率的。
基于以上这点感想,自己独立阅读了HGE的一些小例子,并且打算用HGE开发一个小型游戏。
如果需要在C++的程序中频繁调用某个函数的话,最好的办法是先将其封装成类,在将其做成单例模式。这种方法的好处就是随时可以在这个类以外调用它。下面写个小例子,从程序中摘抄下来的:
#include
class CResourcesManager
{
public:
CResourcesManager();
~CResourcesManager();
static CResourcesManager& Instance();
};
CResourcesManager& CResourcesManager::Instance()
{
static Poco::SingletonHolder
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
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
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小引擎的一些使用,希望大家多多指教!