在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
. ^' F j g% p' {5 [3 O9 @分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
% S, Q! D! X$ T6 D3 M' R( ~形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 # `' I- E H( z
& | Q' D) `* G% [" o" b本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 & F" c9 f6 k5 P# `4 y% Y2 ^
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, ; W$ u6 [. D- L, g" w. L" j
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。 ' D8 @6 Z- `% S* Z2 p# F2 [5 J- J
(当然,都是以4个字节的16进制数的形式存在的)
6 t4 j+ j: C2 m( v我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 # I- m! l+ e; R0 @! a5 i& X2 i
如果找到的话,就在画面上表示出来。
9 @. I" L( B Q表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
/ K Z& d: S! H/ f, b9 T就在相应的位置画上一条纵向的竖线。 7 a( c H4 I* F+ r3 a, C2 m
如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 4 ]! }/ }& Z/ t: n
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 ( T6 V0 v+ j( ?; V- o. l. G+ X- O
由于这些数据是分散,非均匀分布的所以可以很直观地排除。 - {* z* }* `6 k6 U# I
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。
# _- X' \! @/ E- C* b$ V" m# `有了这个工具,可以大大加快寻找图片字库定义的过程。
) L( o7 O/ ]1 ]9 T另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
/ s. y6 ?$ y9 U; V对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
% n$ R: |- O% w! a" v4 `! K, Q
5 I% l2 A$ \$ A; K; M& w不知道有没有懂技术的热心朋友来完成这个工具?
& `2 E$ M( f; {# w2 ^" _5 ^+ \6 ^" s
----------------------------------------------------------
8 q# ]/ r0 Q$ u5 C7 ?% {9 D& ], K2010.4.15 更新 ) {% b7 {1 R# x1 I
scgame,你好,想把这个任务安排给你来作。
5 W' R8 M t; R, N最近如果事情比较多的话,可以等有空的时候再做,不着急。
1 X k$ A1 o" ?' @) G: X/ D% {我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
7 p: O5 k6 S) ~有不懂的话,请提问。 3 {$ X% ]% ?7 c: i4 B+ W! E0 j
* O- q4 r: H) ?: h |