好吧,既然007不相信我的分析,那我就用实例来说明吧。* J3 d% k$ g3 u/ U
以font目录中的font_game_menu_buttons为例,用16进制工具打开它,我们就能看到:8 ^5 F2 A- ?7 u. s0 {& k, H7 D
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
/ I. P% g! T5 m8 G/ S' a J3 {
% w/ ]0 U6 i8 x) J00000000 16 00 00 00 66 6F 6E 74 5F 67 61 6D 65 5F 6D 65 ....font_game_me; Y9 L7 P3 ~6 J) W, M/ R
00000010 6E 75 5F 62 75 74 74 6F 6E 73 21 00 00 00 50 04 nu_buttons!...P.
: ~) G1 t7 Q6 L6 d00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1 W+ S: P! q g00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................& U" h9 N! E4 T1 }1 |, w
: P/ U D1 D5 [1 j! T+ A
第一个字节0x16表示每个字符的占位是24个字节,偏移量0x1e开始的4个字节0x0450代表这个索引表一共有这么多个字符。
; n$ r. F' i+ z- T
b2 k3 v/ \6 c1 \1 g0 O) C再跳到数据部分:: ] O( Q9 h) d* g
( ?" n, x# O5 K7 M1 Q2 x8 V! X n
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
: i+ o3 w3 j- v9 _! ]$ t. g5 _
2 D; h8 |& d$ g" m; Y- Y9 Z3 z00000320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
c9 F: p( C% a* M% ^00000330 00 00 00 00 00 00 00 00 00 00 6A 01 00 00 AE 00 ..........j...?, z( K& d9 G3 b2 s1 e! K, `9 f8 V% M
00000340 00 00 6F 01 00 00 CF 00 00 00 00 00 00 00 00 00 ..o...?........
8 Z; L; [1 c" p1 D X00000350 00 00 EF 01 00 00 AE 00 00 00 F5 01 00 00 CF 00 ..?..?..?..?, Z3 g' n* C4 l* h
00000360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................; V/ N- e; X# X/ E6 n# W7 b
00000370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................5 ~) ^$ m# t2 O' |) g. Z
" z" j t7 G0 V* f Y5 N0x016A, 0x00AE,0x016F,0x00CF分别是左上角的横纵坐标,右下角的横纵坐标,我们看看这个范围在对应的图片中是什么:
) Z7 z; ~# f/ U1 R) |/ O
. i' v: e2 ~: z9 L/ C: ^+ F& Q
) z2 z2 Z. b3 H$ c从图中可以看出,这个范围对应的是字符"!"。同样,跳过8个字节的00后,0x01EF, 0x00AE, 0x01F5, 0x00CF也能对应出相应的字符。
0 t1 z; U- {) ?
! L$ [9 {+ L- b% t: a8 K% _+ F$ W1 W为此,我专门写了一个小工具来查看显示顺序与图片之间的关系。这个工具只能证明字符的存储是按照ASCII顺序,而不能说明是从哪个字符开始的。
, F/ g7 n$ F* T- k) V4 t
/ j2 T* e* W3 `' }. d当然,这个工具中我做了一些处理。因为第一个显示的字符是"!",所以我将它的ASCII码定为33了。) t X: u/ h( s- Z" V/ P& [, o
我们点击SPIN的上下箭头,调整ASCII码,就可以看到该顺序在索引中取出的是什么字符图片。 |