网页上提供了三个版本的HGE源码,既然是学习,那就从低版本开始吧.
下载解压后,很容易找到核心源码 hge16/src/core
根据文件名就很容易理解HGE的结构了
demo.cpp 明显是演示用的
graphics.cpp 图形显示.
ini.cpp 初始化
input.cpp 输入
random.cpp 随机数的生成
resource.cpp 资源
sound.cpp 声音
system.cpp 系统
timer.cpp 计时
一眼看上去就觉得结构很清晰.
这么多的.cpp,怎么才见到一个hge_impl.h呢?
原来这个头文件里这样写着 class HGE_Impl : public HGE,类里都是函数的声明.定义就都在上面的cpp里了.
上面的这个HGE类就是一个接口类,声明在hge16/include/hge.h中,里面写了所有的接口函数.
在core下还有两个文件夹,BASS和Zlib,前者是音效相关的,后者是个用来压缩和解压的库.
在 hge16/tutorials下提供了8个例子,在hge16/tutorials/precompiled下还提供了例子的可运行程序.
下面就是第一个例子:
** Haaf's Game Engine 1.6
** Copyright (C) 2003-2006, Relish Games
** hge.relishgames.com
**
** hge_tut01 - Minimal HGE application
*/
#include " ../../include/hge.h "
HGE * hge = 0 ;
// This function will be called by HGE once per frame.
// Put your game loop code here. In this example we
// just check whether ESC key has been pressed.
bool FrameFunc()
{
// By returning "true" we tell HGE
// to stop running the application.
if (hge -> Input_GetKeyState(HGEK_ESCAPE)) return true ;
// Continue execution
return false ;
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int )
{
// Here we use global pointer to HGE interface.
// Instead you may use hgeCreate() every
// time you need access to HGE. Just be sure to
// have a corresponding hge->Release()
// for each call to hgeCreate()
hge = hgeCreate(HGE_VERSION);
// Set our frame function
hge -> System_SetState(HGE_FRAMEFUNC, FrameFunc);
// Set the window title
hge -> System_SetState(HGE_TITLE, " HGE Tutorial 01 - Minimal HGE application " );
// Run in windowed mode
// Default window size is 800x600
hge -> System_SetState(HGE_WINDOWED, true );
// Don't use BASS for sound
hge -> System_SetState(HGE_USESOUND, false );
// Tries to initiate HGE with the states set.
// If something goes wrong, "false" is returned
// and more specific description of what have
// happened can be read with System_GetErrorMessage().
if (hge -> System_Initiate())
{
// Starts running FrameFunc().
// Note that the execution "stops" here
// until "true" is returned from FrameFunc().
hge -> System_Start();
}
else
{
// If HGE initialization failed show error message
MessageBox(NULL, hge -> System_GetErrorMessage(), " Error " , MB_OK | MB_ICONERROR | MB_APPLMODAL);
}
// Now ESC has been pressed or the user
// has closed the window by other means.
// Restore video mode and free
// all allocated resources
hge -> System_Shutdown();
// Release the HGE interface.
// If there are no more references,
// the HGE object will be deleted.
hge -> Release();
return 0 ;
}
从运行的结果看,这就是一个显示一个简单的logo,然后按Esc或者程序右上角的X就可以退出.
首先就是创建一个接口对象
hge = hgeCreate(HGE_VERSION);
下面就是开始设置参数,然后初始化,接着就可以start了.当程序收到退出命令以后释放所有的资源.
最后就是hge->Release()