生成一个swf文件,Display list(上)
?
显示一帧,需要三个步骤。 要为每一个现实列表中的对象分配一个深度。深度和变成中的概念是一样的。 好了准备的足够充分,我可以看看一个完整的例子了。遇到没有提及的内容时,我可以再回来翻文档。 例子在样式书的附录A. 000000 46 57 53 03 4F 00 00 00 78 00 05 5F 00 00 0F A0 青色文字是header,我现在知道46 57 53 是FWS,? 03表示了这是一个flash3格式导出的文件,文件长度0x4F =79。哦,奇怪!但是请记住字节顺序是liitle-endian,所以得把它倒过来看。接下来是一个用变长数表示的RECT,变长数是讨厌的东西,得把它拆成二进制才能分析。回忆RECT的格式是UB[5]然后4个SB[Nbits],那要先拆5个bits出来。这时候windows的计算器真是一个好帮手! 0x78 -> 0111 1000 五个是01111 -> 十进制的15。那么有15 * 4+5 = 65位的变长数是对这个RECT有效的。这就是说我要拆ceil(65/8)=9个bytes出来,看看header下面的一项是贞频,一个UI16,所以变长数要补0,灰色的部分。 0111 1000?? 0000 0000?? 0000 0101?? 0101 1111?? 0000 0000 好,上了颜色容易辨认出绿色的是Nbits, 两个红色的是0分别是Xmin和Ymin,那两个蓝色的是Xmax和Ymax。 接下来是8.8的定点数00 0C 表示 12.0这是贞频,最后是01 00表示总共有一贞。 这是复习,下面开始看看tag 43 02 FF FF FF 文件的总长度是79,减掉21的header这个tag差不多是短格式拉。这样判断合乎逻辑,却是错误的!判断一个tag的格式的唯一方法是把它的前两个byte拆成bits,看看他是什么类型,又要注意字节顺序:little-endian。所以:0x0243 -> 0000 0010 0100 0011。红色的部分是9。这个tag的长度由黑色的部分表示,3 bytes。 9是什么意思呢?如果不像每次都通读文档,最好还是去找一本reference。我的书签里边有一个链接,那里有一个在线的,虽然版本有点老。9是setBackgroundColor,后面要一个RGB所以正好3 bits:看后面,0xFFFFFF是白色。这是一个定义块。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |