关于通用图片字库生成工具,我也早有一个制作思路。3 w( ~7 k' V) Z' c) U" _
# V: K% C: \7 p, t- m8 e7 i! T
先写出来,仅供大家参考。
8 B) t: }6 K5 S4 {, _4 R. V- S其实,要把工具做得通用化,关键是要在字库定义文件上下功夫。
- n- k+ U! O- W4 _4 ~' m所以我设计了以下这样一个大致流程。# ^7 @$ i7 H1 @! x/ R; r+ H
E8 K/ @$ l5 Z& n/ s- }) v
1.图片字库的图片部分生成
0 Q y, y6 \% p4 E9 S对于不同类型的图片字库,其核心是相同的,即定义了一个图片字符的集合,让游戏能根据图片字库定义文件从图片字库中找出对应的字符所; v! V. \* c. ~) E: z
在的区域。
# _5 S. g3 M, Y- }9 f' F2 l; B F5 t. Q) R; I$ @( {
因此我设计了一种通用图片字库定义格式。
# R0 l: w& [* t这个格式是一个类似csv文件的结构,每行用逗号分割,对应一个字符的所有属性。
' s2 V9 {' C* @+ o3 z一个字符的所有属性有大约有20多种,比如字符的宽度,高度,间距等等,我们可以事先收集1批游戏的字库定义文件,( J, R$ P6 m2 L( ^1 q0 V: u' ^& P
把各种属性总结归纳出来即可。! j' | l& \/ o2 n: j/ x
. ^; ~8 I2 q" ]# @所以,第1步操作是这样的
& f3 C2 s* `, k0 v$ i( I图形界面的主程序MakeFont.exe
G# l' B, v& l9 L) `输入:所有不重复的字符列表AllChars.txt,以及图片的大小,字符宽高等各种参数
% c$ [4 g# \, J2 X输出:字库图片font.png,字库信息文件fontinfo.txt,通用图片字库字符定义文件define.txt
7 h& s$ v6 c& a6 i! h8 n: F 字库信息文件fontinfo.txt保存了整个图片的信息,比如图片的宽度高度等等。
$ ^! g* c" p: G define.txt中以上面描述的格式保存了所有字符的所有可能的属性。- ^. w5 b n9 ~1 H
每行对应一个字符。由于要把工具做成通用的,我们无法预知最终需要哪些属性, g4 c! e2 T/ J( |/ `9 S
所以只能把所有属性都生成出来。
, |4 L. G7 _) I 如果完成了这1部,就已经是一个很强大的工具了。
! q* V* ~+ j# A- L) n) c. _ 会编成的朋友可以制作一个小程序,把define.txt转化成游戏需要的定义文件的格式。
( {# r2 Z/ }% E9 m8 f! w% d1 z 当然,我们的目标是要制作出一个让不会编成的朋友也会轻易使用的工具,
$ v& @0 [- u" a4 M( D 所以我们还需要制作一个define.txt到游戏需要的定义文件的格式的转换工具。( k; z% \" l& O7 k/ s
6 V8 c- W$ a6 a0 b( B! ^) y4 U- ?
2.图片字库的定义文件文件生成+ l1 `. e, b+ I5 x9 E
define.txt有了,下一步需要把它转换为游戏需要的定义文件的格式。) w! G g; A7 @/ ?$ j6 k! ]9 X- T
我们把图片字库的定义文件分成以下2类。/ M7 r- d, s+ |) a- }5 _
2 L8 a0 ]% W K- e) Y1 R
a.文本类型
7 J' }. U$ l' j% ]7 b1 w 通常这一类型的定义文件用*.xml,*.txt等作为文件名.% B7 H7 O h4 K3 D: \! S
' X2 T5 w8 r8 u
我们先取得游戏的定义文件,一般这个定义文件都有一定的格式。
! c+ r; ~! w( m# w9 t 我们可以在这个格式的基础上做出1个模版template.txt。模版分固定部分和循环部分。
& K( ?" X1 \) A3 ~; W# s 循环部分定义了每个字符的属性,这些属性用活动的tag来表示." {# e# U7 a3 B9 j
我们可以制作一个图形界面的工具map.exe,用这个工具可以设置活动的tag和define.txt的哪个属性相对应。: S6 s3 |" N2 P$ f
然后生成一个map.txt。
/ g* N1 d" ~% B3 D. A5 _ E( Y 最后根据fontinfo.txt,define.txt,template.txt,map.txt 生成出我们需要的*.xml或*.txt定义文件。
" [) B$ M( u! z9 U) H3 c! r+ n( u% m- o$ T
b.16进制文件类型" x% ]' S+ J- v
通常这一类型的定义文件用*.fnt等作为文件名.
4 s4 M' m3 }# Y8 U& u8 r' G+ ~ 制作过程也和文本类型的类似。只不过有些环节和文本类型略有不同。
, ?0 _& L: ?* q" ]4 U W2 J g 我们把假定的文件名略微改一下。! s/ S# l+ c* H6 U/ c
map_bin.exe,template_bin.txt,map_bin.txt
! ^; M9 u& a7 r: x: z9 T6 Y 最后根据fontinfo.txt,define.txt,template_bin.txt,map_bin.txt 生成出我们需要的*.fnt等定义文件。 |