hgeFontCN.h
上传用户:maxiaolivb
上传日期:2022-06-07
资源大小:915k
文件大小:4k
- /******************************************************
- 该类是为了解决 HGE 不支持中文汉字显示的问题而编写,
- hgeFontCN 类的实现原理与原引擎中的 hgeFont 类模式十分
- 相同,只是需要使用汉字字模图片生成工具先生成汉字的字模
- 图片与字模图片的信息文件。该类的使用方法与 hgeFont的使
- 用方法一致。
- 注意:该类加载汉字字模或许会因为机器配置原因而时间
- 过长,这点会在以后改进。
- 微妙的平衡
- 2005-08-25
- ****************************************************/
- /////////////////////////////////////////////////////
- /////////////////////通用汉字字符类//////////////////
- /////////////////////////////////////////////////////
- #ifndef HGEFONTCN_H
- #define HGEFONTCN_H
- #include "..hgeincludehge.h"
- #include "..hgeincludehgesprite.h"
- #define VALUE_FIX 1
- #define HZ_HIGH_MAX 87 + VALUE_FIX // 0xA1~0xF7 汉字编码范围高位(+1是给普通字母与标点符号留位置)
- #define HZ_LOW_MAX 95 // 0xA0~0xFE 汉字编码范围底位
- #define HZ_HIGH_FIX 0xA1
- #define HZ_LOW_FIX 0xA0
- #define HZ_HIGH_END 0xF7
- #define HZ_LOW_END 0xFE
- #define ASCII_FIX 0x20
- #define ASCII_END 0x7f
- #define ASCII_WIDTH 6
- // 汉字字体文件头
- struct st_FontCN_Head
- {
- char strHead[32]; //文件头
- char strImgFileName[32]; //图像文件名
- DWORD dwStringCol; //每行的字数
- DWORD dwStringRow; //行数
- DWORD dwFontWidth; //字体宽度
- DWORD dwFontHeight; //字体高度
- public:
- void SetData(char *head,char *imgfilename,DWORD nCol,DWORD nRow,DWORD nFWidth,DWORD nFHeight)
- {
- strcpy(strHead,head);
- strcpy(strImgFileName,imgfilename);
- dwStringCol = nCol;
- dwStringRow = nRow;
- dwFontWidth = nFWidth;
- dwFontHeight = nFHeight;
- }
- };
- // 汉字字体数据
- struct st_FontCN_Body
- {
- BYTE HZ[2];
- WORD dwFontX;
- WORD dwFontY;
- public:
- void SetData(BYTE h,BYTE l,WORD fx,WORD fy)
- {
- HZ[0] = h;
- HZ[1] = l;
- dwFontX = fx;
- dwFontY = fy;
- }
- };
- class hgeFontCN
- {
- public:
- hgeFontCN(const char *filename); //根据字体文件创建
- hgeFontCN(const hgeFontCN &fnt); //根据字体对象创建
- ~hgeFontCN(void);
- // hgeFontCN& operator= (const hgeFontCN &fnt);
- void Render(float x, float y, const char *string); //绘制字符串
- void printf(float x, float y, const char *format, ...); //绘制格式字符串
- void SetColor(DWORD col); //设置字体颜色
- void SetZ(float z); //设置Z缓冲
- void SetBlendMode(int blend); //设置混和模式
- void SetScale(float scale) {fScale=scale;} //设置比例
- void SetRotation(float rot) {fRot=rot;} //设置旋转角度
- void SetTracking(float tracking) {fTracking=tracking;} //设置轨迹
- DWORD GetColor() const {return dwCol;} //获得颜色
- float GetZ() const {return fZ;} //获得Z缓冲
- int GetBlendMode() const {return nBlend;} //获得混和模式
- float GetScale() const {return fScale;} //过得比例
- float GetRotation() const {return fRot;} //获得旋转角度
- float GetTracking() const {return fTracking;} //获得轨迹
- float GetHeight() const { return fHeight; } //获得字体高度
- float GetStringWidth(const char *string) const; //获得字符串的象素级宽度
- hgeSprite* GetSprite(BYTE chH,BYTE chL) const; //获得指定的精灵
- private:
- hgeFontCN();
- static HGE *hge; //公用
-
- HTEXTURE hTexture; //字模纹理
- hgeSprite* letters[HZ_HIGH_MAX][HZ_LOW_MAX]; //字符精灵
- float fHeight; //字符高度
- float fScale, fRot; //字符显示比例与角度
- float fTracking; //字符轨迹
-
- DWORD dwCol; //颜色
- float fZ; //Z缓冲
- int nBlend; //混合
- };
- #endif