在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
5 E( |9 C- f1 w分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的 ( E' D5 u) ] U j8 h! E
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 : X8 F: |! \& \7 T3 b
; [$ h2 ^2 Y0 s- g8 e本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。
2 q, u, o) `+ v& v我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
, |+ y9 O0 K2 v2 D+ R在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
9 w# Z/ J1 H- X4 G6 T(当然,都是以4个字节的16进制数的形式存在的)
6 ~2 l& [: _; O我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。
- ^3 ?( g4 K: [& j |7 G如果找到的话,就在画面上表示出来。 * f) j# ]4 {: G8 i# E
表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
4 `0 ~) P8 J" Q就在相应的位置画上一条纵向的竖线。
+ k h( D- u. e& `) {. a1 ^6 ?5 a如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 ) w- l$ U& Z2 ~, X& F
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
) P! P! o9 F- p- u由于这些数据是分散,非均匀分布的所以可以很直观地排除。 ) N' p T' d1 O# Y/ Q( L
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 - F' h- h8 y; O& V. C( [3 X
有了这个工具,可以大大加快寻找图片字库定义的过程。 f: V0 p& }9 h
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。 5 ?6 L: G% J0 m
对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 3 b$ |4 a' \8 U6 i
- ^; \! e: D- _( ^6 Z不知道有没有懂技术的热心朋友来完成这个工具? ; l y" W. f& _+ h9 {! X1 g# a
8 b5 t9 d7 a/ @# e4 f- u! s----------------------------------------------------------
9 J& ~$ Z2 ]5 W; Z5 ?# d5 O" V9 E2010.4.15 更新
& |; Y9 o8 J( cscgame,你好,想把这个任务安排给你来作。
" n: ~% t* D' d* [最近如果事情比较多的话,可以等有空的时候再做,不着急。
3 p- y( A' _' `4 N" g我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
4 `2 v- U- a$ m% ^( r有不懂的话,请提问。 ! |& h3 t# w$ b+ Y+ ~& i1 A
, n; Z" Z, Z2 ]' k% g2 z, x9 w
|