数据读取中...
 您当前位置:惠州维修 -> 其它类-> 网站制作-> Flash教程 文章搜索:  
生成一个swf文件,文件的结构(2)
作者:转载 来源:惠州维修
日期: 2006-11-20
放大字体显示 缩小字体显示 打印文章 推荐给朋友
项目 类型 说明RedUI8 红色值 GreenUI8绿色值Blue UI8 蓝色值
ARGB ,
AplhaUI8透明值,0为完全透明RedUI8 红色值 GreenUI8绿色值Blue UI8 蓝色值

RGBA ,
RedUI8红色值 GreenUI8 绿色值BlueUI8蓝色值AplhaUI8 透明值,0为完全透明
上面的3个是表示颜色的

Rectangle ,这个以前写过了,参考第一篇http://space.flash8.net/space/html/55/381555_itemid_307609.html

Matrix 表示的是一个形状的仿射变换,有关仿射变换可以参考java.awt.geom.AffineTranform类,或者flash.geom.Matrix类的说明,或者任何一本大学的几何教材。
 项目类型 说明 HasScale  UB[1]如果包含缩放,则为1 NScaleBits 如果HasScale=1,UB[5]否则没有该项指示下面两项,每项要使用的bit数ScaleX 如果HasScale=1,FB[NScaleBits]x方向上的缩放ScaleY 如果HasScale=1,FB[NScaleBits]y方向上的缩放HasRotateUB[1]如果包含旋转,或者扭曲,则为1NRotateBits 如果HasRotate=1,UB[5]指示下面两项,每项要使用的bit数RotateSkew0如果HasRotate=1,FB[NScaleBits]有关旋转和扭曲的第一个值RotateSkew0 如果HasRotate=1,FB[NScaleBits]有关旋转和扭曲的第二个值NTranslateBitsUB[5]指示下面两项,每项要使用的bit数TranslateXSB[NTranslateBits]x方向上平移的量,单位是twipsTranslateYSB[NTranslateBits]y方向上平移的量,单位是twips
这个matrix record对应一个2x3矩阵:

  ScaleX       RotateSkew0 
( RotateSkew1  ScaleY      )
  TranslateX   TranslateY

对于在一个坐标系中的(x, y),变换后的 (x', y')按照如下方法得到:
x' = x * ScaleX + y * RotateSkew1 + TranslateX
y' = x * RotateSkew0 + y * ScaleY + TranslateY

更多的内容请参考样式书。

还有两个:Color Matrix record和Color Matrix with aplha record,是处理颜色转换,这和我暂时没有很大关系,所以如果将来感兴趣了再去参考吧。注意到这些后面的这些record上都对应了flash.geom包的类,但是它们却并非flash8中加入的新成员。所以不要以为只关心7以前的版本就完全没有必要看它们。

这样,基本的数据类型就是这样多了。于是,一个深刻的问题出现在我的面前。我要怎么使用这些类型?这里连一个声明/调用的语法都没有。

文件结构


要注意,现在我的事情是理解swf文件的结构(最后要生成一个)。这不是编程,而是编码。所以我必须按照swf的文件结构,按照一定的顺序把正确类型的数据放在正确的位置。这个就是本文的正体,上面噜苏的一堆其实算是对上一篇的补完。

swf文件是文件头和一些叫做tag的组成的。

上次介绍了header,这次来看一看tag:

tag的头

tag是以tag的类别和一个表述该tag的长度的域开始的,根据这个tag的长度不同,这个tag的头有两种:短格式的头和长格式的。短格式的tag要求数据内容(不包括头)的长度不超过62 bytes;而长格式则可以最多达4GB(我剩下的硬盘空间还不到4G哩,装的都是游戏,厚厚。正在写东西时候不能提游戏,想放下就去打)。

短格式
项目类型 说明 TagCodeAndLength UI16 高10位是tag类别,低6位是长度
长格式
项目类型 说明 TagCodeAndLength UI16 形式上和短格式一致,但是低6位的长度的数值固定为0x3fLength  SI32数据长度
tag的种类

在一个swf中包含两中tag分别是Definition(定义)和Control(控制)。定义块中包含了对swf要包含内容的定义。比如一个图形,文字之类。定义块中要为每一个内容的定义指派一个唯一的id叫做character id(不要误会character的意义,这里不是指字符,而大约是标志的意思,而我想从这里开始使用标志这个词)。swf把这些标志(character)存放在一个叫做字典(dictionary)的结构中。注意定义块不会导致任何的屏幕绘制。

控制块处理,创建字典中标志的实例,绘制屏幕,控制流程等。

顺序

除了FileAttribute要放在最前(这是一些全局的东西),end它要放在最末。块之间不需要顺序。但是要保证依存关系,比如块B要引用块A的标志,就不能在A的前面出现。Stream块需要按照顺序。

  swf文件中的基本数据类型有整型(包括8,16,32的有符号和无符号,但是我在变成中感觉不到两者的区别),定点数,浮点数,变长数。下面的数据类型也是样式书中定义的基本类型,但是他们的定义都是以上面的4中作为基础的:

字符串,字符串是以全0结束的byte序列,采用utf-8编码。有关utf-8可以参考http://www.unicode.org/unicode/faq/utf_bom.html#UTF8

语言种类,语言种类是一个byte,描述的不是编码而是自然语言。用来处理字体还有在需要换行的时候处理断字,比如一个很长的英文单词出现在行尾但显示不下,可能会被处理显示到行首。

record,这个有点像C语言的structure,或者支持类的语言中没有方法的类。它按照格式顺序的储存一些上述的类型。样式书中有这样的一些record:

RGB color record
文章页数:[1] 
帮助你我他: 1.我有问题请教 2.我要投稿>>>
更多相关资料搜索:
热点文章
最新文章
相关文章
版权申明:除部分特别声明不要转载,或者授权本站独家播发的文章外,大家可以自由转载本站的原创文章,但原作者和来自本站的链接必须保留(非本站原创的,按照原来自一节,自行链接)。文章版权归本站和作者共有。
转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去本站水印。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论  打印  刷新  推荐给朋友  返回顶部  关闭

网上大名: