在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
- p! C( i# x$ P% e4 t9 C3 U- H9 c分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
) u7 v( J" K, E" ]" f% ?+ ^1 {+ O形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
% W! `; p0 Q3 o; Y( N. F S; c! Q7 s, ?! c! l
本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。
. x. y3 g+ Q8 |3 u; Q2 o我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, 2 G+ V+ K7 z2 }- I( h9 g1 {% u0 D
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。 6 o( H5 `5 Q+ a: e! ]# [0 ?9 f
(当然,都是以4个字节的16进制数的形式存在的) & h/ B6 o* Z L8 W
我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 8 Z& A7 O8 L" d3 ?! Z
如果找到的话,就在画面上表示出来。
6 Z6 {! a2 k3 C- [/ J& ]表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
! n. N! C" T6 M5 L- y( m1 z" w就在相应的位置画上一条纵向的竖线。
+ R9 n; \6 X! c7 z3 {8 Q, J如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 ' u- W4 x+ [' _7 S+ c% |
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 , b" X. Z2 i, g! U) u# t
由于这些数据是分散,非均匀分布的所以可以很直观地排除。
2 f9 k8 H3 r/ O& l! l这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。
0 {: ?) |: `2 q有了这个工具,可以大大加快寻找图片字库定义的过程。
& P- v n E) H/ l; y; }" R另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
$ _8 ]% L" ^* J" Y对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 , P1 m8 ^" d, [& Y3 ~7 n
( l4 x0 O, S/ x0 }7 l
不知道有没有懂技术的热心朋友来完成这个工具? 2 l! y9 s# k6 Y Y
: W! r. d8 s& ~! A---------------------------------------------------------- 4 q% S0 @8 }: g0 i9 l9 r
2010.4.15 更新
: A8 ]$ y2 ]" cscgame,你好,想把这个任务安排给你来作。 ( N; |8 B! [& v" S
最近如果事情比较多的话,可以等有空的时候再做,不着急。 % j( [# y' j" N& |
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。 * v1 H; O( M p! V3 |
有不懂的话,请提问。
8 k1 t) b1 S: l: }4 ~2 q
4 M0 a7 M1 f9 P9 ?, x* h/ I |