在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
! A0 s. ?2 ~2 `% O, m% B& d& W分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
9 L, H* {, C- H3 Y0 {# r1 J形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
8 W9 t& K6 a4 I* e4 Y$ E: v. B w; P2 w k! B4 Y: j1 k2 _
本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 I3 t# s2 C* c. g) Z
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
4 V: o% F9 `0 A& p7 G在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
3 r: Q7 q' ?/ w" v' s/ T! F1 O(当然,都是以4个字节的16进制数的形式存在的)
: f% e1 W0 r- i6 ?5 t& m我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 * U* B8 ]/ @; q2 O- h
如果找到的话,就在画面上表示出来。
0 L: S$ Z5 ~0 l" h& r/ w. H表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
; Q O' |$ u6 n0 R" o! d+ R. F就在相应的位置画上一条纵向的竖线。
. L7 D1 u p" v5 V如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
0 a$ A0 Z! ^' \0 M用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 8 t2 Q. f7 z2 C: u
由于这些数据是分散,非均匀分布的所以可以很直观地排除。 ' N0 |/ c7 {+ B8 y: i) T1 z
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。
7 s; O# X" X/ [( }3 R$ I有了这个工具,可以大大加快寻找图片字库定义的过程。 " o" Y3 ?0 E2 w
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。 ; ?2 |" k7 H: ]2 w' R" f9 x
对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
( U' R5 W& r+ G3 K, `' F! U) _; |* m) t. n" L! i2 f
不知道有没有懂技术的热心朋友来完成这个工具?
( R- K. p4 Z" H T. J2 k# d- Z' s, S5 i& O
---------------------------------------------------------- 8 A' N O+ o- M2 E3 A8 d
2010.4.15 更新 % w' M: d. i; M8 R: x5 I
scgame,你好,想把这个任务安排给你来作。 & b9 E5 O- ?1 r% B. Y& `
最近如果事情比较多的话,可以等有空的时候再做,不着急。 , K" I T. W8 \ e( U2 \/ P
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。 ; _) ]8 Q' M, C! z+ G* M1 e! y1 L" D
有不懂的话,请提问。
; o4 e; c! F) h6 j; t Y! N' B( n' }
$ p9 G% g, h4 X. @( Q: q' @ |