hgeFontCN.h
上传用户:maxiaolivb
上传日期:2022-06-07
资源大小:915k
文件大小:4k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /******************************************************
  2. 该类是为了解决 HGE 不支持中文汉字显示的问题而编写,
  3. hgeFontCN 类的实现原理与原引擎中的 hgeFont 类模式十分
  4. 相同,只是需要使用汉字字模图片生成工具先生成汉字的字模
  5. 图片与字模图片的信息文件。该类的使用方法与 hgeFont的使
  6. 用方法一致。
  7. 注意:该类加载汉字字模或许会因为机器配置原因而时间
  8. 过长,这点会在以后改进。
  9. 微妙的平衡
  10. 2005-08-25
  11. ****************************************************/
  12. /////////////////////////////////////////////////////
  13. /////////////////////通用汉字字符类//////////////////
  14. /////////////////////////////////////////////////////
  15. #ifndef HGEFONTCN_H
  16. #define HGEFONTCN_H
  17. #include "..hgeincludehge.h"
  18. #include "..hgeincludehgesprite.h"
  19. #define VALUE_FIX 1
  20. #define HZ_HIGH_MAX 87 + VALUE_FIX // 0xA1~0xF7 汉字编码范围高位(+1是给普通字母与标点符号留位置)
  21. #define HZ_LOW_MAX 95 // 0xA0~0xFE 汉字编码范围底位
  22. #define HZ_HIGH_FIX 0xA1
  23. #define HZ_LOW_FIX 0xA0
  24. #define HZ_HIGH_END 0xF7
  25. #define HZ_LOW_END 0xFE
  26. #define ASCII_FIX 0x20
  27. #define ASCII_END 0x7f
  28. #define ASCII_WIDTH 6
  29. // 汉字字体文件头
  30. struct st_FontCN_Head
  31. {
  32. char strHead[32]; //文件头
  33. char strImgFileName[32]; //图像文件名
  34. DWORD dwStringCol; //每行的字数
  35. DWORD dwStringRow; //行数
  36. DWORD dwFontWidth; //字体宽度
  37. DWORD dwFontHeight; //字体高度
  38. public:
  39. void SetData(char *head,char *imgfilename,DWORD nCol,DWORD nRow,DWORD nFWidth,DWORD nFHeight)
  40. {
  41. strcpy(strHead,head);
  42. strcpy(strImgFileName,imgfilename);
  43. dwStringCol = nCol;
  44. dwStringRow = nRow;
  45. dwFontWidth = nFWidth;
  46. dwFontHeight = nFHeight;
  47. }
  48. };
  49. // 汉字字体数据
  50. struct st_FontCN_Body
  51. {
  52. BYTE HZ[2];
  53. WORD dwFontX;
  54. WORD dwFontY;
  55. public:
  56. void SetData(BYTE h,BYTE l,WORD fx,WORD fy)
  57. {
  58. HZ[0] = h;
  59. HZ[1] = l;
  60. dwFontX = fx;
  61. dwFontY = fy;
  62. }
  63. };
  64. class hgeFontCN
  65. {
  66. public:
  67. hgeFontCN(const char *filename); //根据字体文件创建
  68. hgeFontCN(const hgeFontCN &fnt); //根据字体对象创建
  69. ~hgeFontCN(void);
  70. // hgeFontCN& operator= (const hgeFontCN &fnt);
  71. void Render(float x, float y, const char *string); //绘制字符串
  72. void printf(float x, float y, const char *format, ...); //绘制格式字符串
  73. void SetColor(DWORD col); //设置字体颜色
  74. void SetZ(float z); //设置Z缓冲
  75. void SetBlendMode(int blend); //设置混和模式
  76. void SetScale(float scale) {fScale=scale;} //设置比例
  77. void SetRotation(float rot) {fRot=rot;} //设置旋转角度
  78. void SetTracking(float tracking) {fTracking=tracking;} //设置轨迹
  79. DWORD GetColor() const {return dwCol;} //获得颜色
  80. float GetZ() const {return fZ;} //获得Z缓冲
  81. int GetBlendMode() const {return nBlend;} //获得混和模式
  82. float GetScale() const {return fScale;} //过得比例
  83. float GetRotation() const {return fRot;} //获得旋转角度
  84. float GetTracking() const {return fTracking;} //获得轨迹
  85. float GetHeight() const { return fHeight; } //获得字体高度
  86. float GetStringWidth(const char *string) const; //获得字符串的象素级宽度
  87. hgeSprite* GetSprite(BYTE chH,BYTE chL) const; //获得指定的精灵
  88. private:
  89. hgeFontCN();
  90. static HGE *hge; //公用
  91. HTEXTURE hTexture; //字模纹理
  92. hgeSprite* letters[HZ_HIGH_MAX][HZ_LOW_MAX]; //字符精灵
  93. float fHeight; //字符高度
  94. float fScale, fRot; //字符显示比例与角度
  95. float fTracking; //字符轨迹
  96. DWORD dwCol; //颜色
  97. float fZ; //Z缓冲
  98. int nBlend; //混合
  99. };
  100. #endif