HGE编写游戏的心得体会

         首先,HGE是一款轻量级的WIndows环境下的引擎,他能帮助我们更方便的开发WIN32的程序,由于长时间没有更新,所以慢慢被大家遗忘,但是不可否认,这款引擎对于底层函数的封装是非常有效率的。

基于以上这点感想,自己独立阅读了HGE的一些小例子,并且打算用HGE开发一个小型游戏。

 如果需要在C++的程序中频繁调用某个函数的话,最好的办法是先将其封装成类,在将其做成单例模式。这种方法的好处就是随时可以在这个类以外调用它。下面写个小例子,从程序中摘抄下来的:

#include

class CResourcesManager
{
public:

CResourcesManager();
    ~CResourcesManager();

static CResourcesManager& Instance();
 };
   

CResourcesManager& CResourcesManager::Instance()
{
    static Poco::SingletonHolder 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
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 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编写游戏的心得体会)