在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件, + I& Q1 T0 U+ X$ k2 t7 _ Z
分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
! E" J g! i$ v& f; U! `形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 3 Y- v1 D! g/ t- {+ u/ X1 g
1 S9 E2 j6 o/ y, D; g, e3 h本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 + I, W, W/ W; e, D/ s! P1 m$ E* o
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
3 J9 |6 J. ~) e$ p& I% @" `在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。 , V& m/ N- b0 @; [
(当然,都是以4个字节的16进制数的形式存在的)
, @) P/ O5 j9 M/ A6 q) i我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。
. N+ l4 L' z4 x- B如果找到的话,就在画面上表示出来。
( ^ X) i. l6 ~/ R( `2 e8 s表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话, 6 _6 b) j8 d7 _% w* l
就在相应的位置画上一条纵向的竖线。
9 _1 R- R" `2 L9 ]! D# H0 @# K如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 3 @# P( V* F2 F0 z
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 7 M2 _9 u) |" W( S$ h, i& W
由于这些数据是分散,非均匀分布的所以可以很直观地排除。
- K9 ^8 h3 X8 [$ U4 h- [- [) d这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。
+ b, }5 L/ I, o, e+ ?有了这个工具,可以大大加快寻找图片字库定义的过程。 0 J/ k9 |* H' q
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。 , x+ |; ?6 H$ @& B! L9 R$ U
对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
* o. }& @" _2 P; v3 X
' T2 O1 @, I; \不知道有没有懂技术的热心朋友来完成这个工具?
6 k% D3 V6 ~' Z% }2 n3 N: ^) d
' ^ n9 H: B; e6 e2 B----------------------------------------------------------
% I: A+ L& [, p$ q" Z2010.4.15 更新
I0 j1 N( N+ K' w/ f) t2 jscgame,你好,想把这个任务安排给你来作。 8 V% g: a+ W+ u2 T* T2 e
最近如果事情比较多的话,可以等有空的时候再做,不着急。 7 z8 S3 Q/ R2 W9 A, ?! K
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。 7 n3 r7 W) N4 J, B: y' b
有不懂的话,请提问。
( J/ H! Q0 _; h
; O. O6 M* @( \4 h' X |