好吧,既然007不相信我的分析,那我就用实例来说明吧。
5 x$ k5 J; V% ~% b4 z6 S! z% c以font目录中的font_game_menu_buttons为例,用16进制工具打开它,我们就能看到:
2 L! H# n; {+ w/ {; @Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F7 P1 p0 t5 H+ I* p
5 @9 \7 ~/ f8 B5 z4 C# l00000000 16 00 00 00 66 6F 6E 74 5F 67 61 6D 65 5F 6D 65 ....font_game_me
- { I1 A( ~) Q+ K/ a: @. E00000010 6E 75 5F 62 75 74 74 6F 6E 73 21 00 00 00 50 04 nu_buttons!...P.0 L; D1 u: V4 w
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3 `4 _, g. J0 f# Y5 T8 {00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................( U4 D6 F( H) b9 ^
5 r1 L. D0 ~3 h2 u
第一个字节0x16表示每个字符的占位是24个字节,偏移量0x1e开始的4个字节0x0450代表这个索引表一共有这么多个字符。0 p; }0 I/ \6 n+ V% ~. g4 ?
3 g: ]' e% ~5 I* t再跳到数据部分:9 p1 q1 B$ I) o" m, L3 G
: ^& q4 C( ?( t d5 F
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ F* Z& G; ~8 j9 m3 C) X. H6 j8 D0 D; t$ f0 G
00000320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9 H$ K) Q. R$ }" W/ V% [00000330 00 00 00 00 00 00 00 00 00 00 6A 01 00 00 AE 00 ..........j...?& [$ J# q" N* [2 g. c2 A% v
00000340 00 00 6F 01 00 00 CF 00 00 00 00 00 00 00 00 00 ..o...?........
" l7 r, B7 h- Y5 P00000350 00 00 EF 01 00 00 AE 00 00 00 F5 01 00 00 CF 00 ..?..?..?..?* d/ r5 {9 Z! D0 T
00000360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................9 V% W6 I0 @" r! |
00000370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................* v. n }5 r# l: k
8 P: W. V9 x* E, \& n8 r" \. w& ] A
0x016A, 0x00AE,0x016F,0x00CF分别是左上角的横纵坐标,右下角的横纵坐标,我们看看这个范围在对应的图片中是什么:% f v, J! L, z7 e
6 W. ^2 A" W- b. h6 L. U 3 `9 x$ u! K& [# o, ^
从图中可以看出,这个范围对应的是字符"!"。同样,跳过8个字节的00后,0x01EF, 0x00AE, 0x01F5, 0x00CF也能对应出相应的字符。+ h' i. R% B8 r0 ~9 W8 E& L
5 k" M) d8 M5 V+ d0 x1 g8 G$ w- z为此,我专门写了一个小工具来查看显示顺序与图片之间的关系。这个工具只能证明字符的存储是按照ASCII顺序,而不能说明是从哪个字符开始的。
t, [8 u* A" T$ o8 j/ E 0 g/ v4 y- L' X6 V/ Y4 E1 a
当然,这个工具中我做了一些处理。因为第一个显示的字符是"!",所以我将它的ASCII码定为33了。
( u8 t" s. ^& ]$ g" h我们点击SPIN的上下箭头,调整ASCII码,就可以看到该顺序在索引中取出的是什么字符图片。 |