TmpFontConfig.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /**
  2. * 字体配置JSON
  3. */
  4. export interface TmpFontJson {
  5. size: number;
  6. bold: number;
  7. italic: number;
  8. padding: [number, number, number, number];
  9. spacing: [number, number];
  10. outline: number;
  11. lineHeight: number;
  12. base: number;
  13. scaleW: number;
  14. scaleH: number;
  15. pages: number;
  16. packed: number;
  17. alphaChnl: number;
  18. redChnl: number;
  19. greenChnl: number;
  20. blueChnl: number;
  21. pageData: Array<{ id: number, file: string }>;
  22. charData: Array<any>;
  23. }
  24. /**
  25. * BitmapFont字符数据
  26. */
  27. export class TmpFontLetter {
  28. public u: number = 0;
  29. public v: number = 0;
  30. public w: number = 0;
  31. public h: number = 0;
  32. public offsetX: number = 0;
  33. public offsetY: number = 0;
  34. public textureId: number = 0;
  35. public valid: boolean = false;
  36. public xAdvance: number = 0;
  37. }
  38. /**
  39. * BitmapFont配置管理类
  40. */
  41. export default class TmpFontConfig {
  42. private _letterDefinitions: { [id: number]: TmpFontLetter } = {};
  43. private _textures: { [id: number]: cc.Texture2D } = {};
  44. private _json: TmpFontJson = null;
  45. public get json(): TmpFontJson { return this._json; }
  46. public constructor(json: any, textures: cc.Texture2D[]) {
  47. this._json = json;
  48. textures.forEach((v, id) => {
  49. this._textures[id] = v;
  50. });
  51. json.charData.forEach((v) => {
  52. let letter = new TmpFontLetter();
  53. letter.offsetX = v.xoffset;
  54. letter.offsetY = v.yoffset;
  55. letter.w = v.width;
  56. letter.h = v.height;
  57. letter.u = v.x;
  58. letter.v = v.y;
  59. letter.textureId = v.page;
  60. letter.valid = true;
  61. letter.xAdvance = v.xadvance;
  62. this.addLetterDefinitions(v.id, letter);
  63. });
  64. }
  65. public addTexture(id: number, texture: cc.Texture2D): void {
  66. this._textures[id] = texture;
  67. }
  68. public addLetterDefinitions(letter: number, letterDefinition: TmpFontLetter): void {
  69. this._letterDefinitions[letter] = letterDefinition;
  70. }
  71. public cloneLetterDefinition(): { [id: number]: TmpFontLetter } {
  72. let copyLetterDefinitions = {};
  73. for (let key in this._letterDefinitions) {
  74. let value = new TmpFontLetter();
  75. cc.js.mixin(value, this._letterDefinitions[key]);
  76. copyLetterDefinitions[key] = value;
  77. }
  78. return copyLetterDefinitions;
  79. }
  80. public getTexture(id: number): cc.Texture2D {
  81. return this._textures[id];
  82. }
  83. public getLetter(key: string): TmpFontLetter {
  84. return this._letterDefinitions[key];
  85. }
  86. public getLetterDefinitionForChar(char: string): TmpFontLetter {
  87. let key = char.charCodeAt(0);
  88. let hasKey = this._letterDefinitions.hasOwnProperty(key);
  89. let letter;
  90. if (hasKey) {
  91. letter = this._letterDefinitions[key];
  92. } else {
  93. letter = null;
  94. }
  95. return letter;
  96. }
  97. public clear(): void {
  98. this._letterDefinitions = {};
  99. }
  100. }