通过一个简单的例子来分析
#include "pch.h"
#include
#include
#include
#pragma comment(lib, "hge")
#pragma comment(lib, "hgehelpers")
HGE* hge = nullptr;
hgeFont* font = nullptr;
bool FrameFunc()
{
if (hge->Input_GetKeyState(HGEK_ESCAPE))
return true;
return false;
}
bool RenderFunc()
{
hge->Gfx_BeginScene();
font->Render(50, 10, HGETEXT_LEFT, "0123");
font->printf(50, 60, HGETEXT_CENTER, "456");
font->printfb(50, 110, 100, 30, HGETEXT_RIGHT | HGETEXT_BOTTOM, "789");
hge->Gfx_EndScene();
return false;
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
hge = hgeCreate(HGE_VERSION);
hge->System_SetState(HGE_SHOWSPLASH, false);
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
hge->System_SetState(HGE_SCREENWIDTH, 800);
hge->System_SetState(HGE_SCREENHEIGHT, 600);
hge->System_SetState(HGE_WINDOWED, true);
hge->System_SetState(HGE_USESOUND, false);
if (hge->System_Initiate()) {
font = new hgeFont("myfont.ini");
hge->System_Start();
}
delete font;
hge->System_Shutdown();
hge->Release();
return 0;
}
效果图
素材
在HGE中,要渲染字体图片是通过hgeFont这个类来操作的,它的构造函数传入的是一个字体描述文件,而非图片文件。
描述文件是一个ini格式的文件
[HGEFONT]
Bitmap=num.png
Char=30,1,1,16,22,0,0
Char=31,1,23,16,22,0,0
Char=32,1,45,16,22,0,0
Char=33,1,67,16,22,0,0
Char="4",1,89,16,22,0,0
Char="5",1,111,16,22,0,0
Char="6",1,133,16,22,0,0
Char="7",1,155,16,22,0,0
Char="8",1,177,16,22,0,0
Char="9",1,199,16,22,0,0
Bitmap指向图片文件,Char来设置每一个字符在图片中对应的位置及大小
每个Char有7个参数,参数之间用逗号分割
第1个参数:字符的ASCII码或用双引号括起来的单字符
第2个参数:字符在图片文件中的X坐标
第3个参数:字符在图片文件中的Y坐标
第4个参数:图片宽度
第5个参数:图片高度
第6个参数:字符左侧水平偏移量
第7个参数:字符右侧水平偏移量
输出字符通过Render、printf、printfb这三种方法,
render是直接渲染字符串,不支持格式化输出。
printf是支持c风格的格式化输出,最终也是通过render方法来渲染。
printfb是将字符串渲染一个指定的矩形中,最终也是通过render方法来渲染。
有一个很大的问题:这个描述文件不支持中文。网上有些修改版解决了问题,有兴趣自己去试试。