好吧,既然007不相信我的分析,那我就用实例来说明吧。) O7 U, O' n: K( X- t& k: @
以font目录中的font_game_menu_buttons为例,用16进制工具打开它,我们就能看到:
- {) P4 e9 Y. {# b+ \; y; V' |; mOffset 0 1 2 3 4 5 6 7 8 9 A B C D E F3 i5 {. K6 F/ T: ~9 R7 d! g
# S" L1 j. i% N. k7 r00000000 16 00 00 00 66 6F 6E 74 5F 67 61 6D 65 5F 6D 65 ....font_game_me* \' m1 x1 V6 G, u
00000010 6E 75 5F 62 75 74 74 6F 6E 73 21 00 00 00 50 04 nu_buttons!...P.
, g \8 A! I% i+ M" I# }3 y00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................/ F7 m. |% x. M+ E2 t' _6 U' e
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................6 f, ~' j% Z% ?5 c3 P9 c4 T
8 {: ?! {5 Z8 A- h第一个字节0x16表示每个字符的占位是24个字节,偏移量0x1e开始的4个字节0x0450代表这个索引表一共有这么多个字符。
/ R9 i0 P+ H* ? @6 C' B$ m" c: J) O1 E4 h, C9 n4 j6 |# _7 U) y
再跳到数据部分:0 c# O: E3 X8 B$ l# O0 y5 F u
, F, | Y& z! w' R! G: B
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
. E! A2 f& q5 N& I( t! ?. @! _: H4 i9 W1 S$ o
00000320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
" n; ?5 u% b) V8 i00000330 00 00 00 00 00 00 00 00 00 00 6A 01 00 00 AE 00 ..........j...?
S9 K/ s. u! V: f% [00000340 00 00 6F 01 00 00 CF 00 00 00 00 00 00 00 00 00 ..o...?........
0 j- O; {% B; e% Q7 w00000350 00 00 EF 01 00 00 AE 00 00 00 F5 01 00 00 CF 00 ..?..?..?..?+ Z& B4 M1 V! C+ M
00000360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1 K2 m4 R& ^# b& \* M' C00000370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................9 X) V K% f& ]5 @# B4 r. A
6 X4 |+ ?# i; H; K' y* X* C: q
0x016A, 0x00AE,0x016F,0x00CF分别是左上角的横纵坐标,右下角的横纵坐标,我们看看这个范围在对应的图片中是什么:
) S: u* {2 B( c2 g% w. ? a
9 L$ R3 p& X9 }+ ~' e & t$ ~) w% E3 L+ ~7 h) u! s% ?* q! \$ e1 J
从图中可以看出,这个范围对应的是字符"!"。同样,跳过8个字节的00后,0x01EF, 0x00AE, 0x01F5, 0x00CF也能对应出相应的字符。
( n7 V( O/ I" F+ d7 u/ k X2 `% i- m% K* Z1 `& T1 P" Z
为此,我专门写了一个小工具来查看显示顺序与图片之间的关系。这个工具只能证明字符的存储是按照ASCII顺序,而不能说明是从哪个字符开始的。3 T# C8 P: a; _4 T, w6 C
! |9 m; s" k: s: k当然,这个工具中我做了一些处理。因为第一个显示的字符是"!",所以我将它的ASCII码定为33了。0 D! \$ M) o' }3 ~2 {5 U' b7 l
我们点击SPIN的上下箭头,调整ASCII码,就可以看到该顺序在索引中取出的是什么字符图片。 |