SWF9文件格式轨范中文翻译(二)
http://hi.baidu.com/zoujun1314/blog/item/4bf0191329de14dbf6039e46.html
字典是定义的角色的存储仓库,给控制型标签使用。字典的创建和使用的流程是这样的: 每一个定义型标签只能指定一个唯一的编号,不允许相同。举一个象征性的例子:第一个角色编号为1,第二个角色编号为2,以此类推。数字0有特殊含义表示一个空的角色。 并不是只有控制型标签可以引用字典。定义型标签也可以使用字典中已经存在的角色来定义更加复杂的角色。例如:DefineButton 和DefineSprite 标签都是通过其他的角色来定义他们的内容(PS:相当于容器里面放内容)。DefineText标签可以通过字体角色来为文本选择不同的字体。 下图是一个典型的定义型标签、控制型标签和字典的关系: SWF文件的处理过程 Flash Player会处理所有的标签直到遇到ShowFrame 标签。此时,显示列表被复制到屏幕,然后播放器继续处理直到下一帧需要显示。第一帧的内容累计了第一个ShowFrame标签之前所有控制型标签的执行结果,第二帧的内容累计从文件开始到第二个ShowFrame标签的所有控制标签的执行效果,以此类推。 文件压缩措施 SWF文件需要在网络上频繁传输,所以自然是越紧凑越好。下面的技巧就是被用来实现现这一点: 重用——角色字典的结构可以让非常容易实现这一点。例如,形状、按钮、声音、字体或者位图只在文件中存一次,却能多次引用。 压缩——形状通过一种有效的偏差编码方式来压缩。通常直线开始的坐标被认为是上一条线的终点。距离通常是相对于上一个点来表达的。 默认值——有一些结构,像matrixes和color transform有一些公用字段用的比其他多。比如一个矩阵,最常使用的就是转换。缩放和旋转比较少用。所以,如果缩放没有定义,它默认为100%,如果旋转没有定义,则默认不旋转。通过这种默认值的方式来让文件更小。 变化编码——作为一种规则.SWF文件只存储状态之前的变化。它由Shape数据结构和显示列表中使用的放置-移动-移除模块体现。 Shape数据结构——Shape数据结构使用了一种特别的结构。使形体的大小最小化,同时在屏幕上渲染抗锯齿效果非常有效。 总结 SWF文件是由一个文件头,和跟在后面的一系列的标签组成。标签有定义型标签和控制型标签两类。定义型标签把对象定义为角色存储在字典里,控制型标签操作这些角色并控制影片的流程。 第一章:SWF9的文件格式 本章描述SWF9文件格式规范中的新特性和标签。 ActionScript 3.0 ActionScript2字节码 类链接(Class linkage) DefineEditText 标签现在支持了HasFontClass 字段。表示指定一个类名作为字体类从其他的SWF中加载。 添加了StartSound2标签用来跟载入的SWF文件的声音一起使用,同时包含了声音类的名称。 二进制数据 文本和字体 场景支持 第二章SWF8文件格式 本章介绍SWF8文件规范中的新特性和标签 位图滤镜 混合模式 位图缓存 加强轮廓 加强渐变 高级文本渲染 9切片缩放 高保真On2 VP6 屏幕视频V2流式编码器(Screen Video V2 bitstream codec) SWF 文件特征和元数据 ImportAssets2
1、定义型标签定义内容,像形体、字体、位图或者声音。
2、定义型标签给内容分配唯一的角色编号(CharacterID)
3、根据角色编号把内容存储到字典中。
4、控制型标签使用角色编号在字典中检索到内容,并对内容执行相关动作,比如显示一个形体(Shape)或者播放一段声音。
SWF9引入了新的AS3语言和虚拟机。为了明确一个SWF是否需要用到新的虚拟机,FileAttributes标签加了一个ActionScript3的字段。本章中描述的东西只有在这个ActionScripte3字段为1时有效。
AS3字节码包含在新的DoABC标签中。关于AS3字节码的详细资料可以在Adobe 虚拟机2(AVM2)的概览中找到。(www.adobe.com/go/avm2overview/)
AS2字节码在AS3的SWF文件中不支持。包括DoAction和DoInitAction标签,以及DefineButton2标签中的Action部分。这些标签中的字节码将被忽略。
很多新的标签已经被添加或修改,用来支持和扩展AS3的类和运行实力之间的链接。SymbolClass标签用来链接SWF文件中的元件(Symbol)和AS3类。SymbolClass是AS3特有的,相当于ExportAssets标签。
PlaceObject3标签现在支持了PlaceFlagHasClassName字段。这个字段表示指定了一个类名,作为对象的类型去放置。同时还支持PlaceFlagHasImage字段。表示将从一个characterID来创建一个位图或者基于一个类名从其他的SWF文件中加载来创建位图。
DefineBinaryData标签允许在SWF文件中植入任何二进制数据。DefineBinaryData用来跟SymboleClass标签联合使用。SymbolClass标签能用来将一个DefineBinaryData标签和一个AS3类定义联系起来,这个类必须为ByteArray的子类。当一个类被实例化,他将自动拥有二进制数据源的内容。
因为各种原因,静态文本域能作为动态文本域导出到SWF。为了确定这样的文本域,DefineEditText标签添加了WasStatic字段。这将允许AS3把这样的文本域作为静态文本来看待。同时为了包含植入在SWF文件中的字体的版本信息添加了DefineFontName标签。
新的DefineSceneAndFrameLableData标签描述了影片剪辑中发现的场景和帧。多场景只支持主时间轴,对于其他的影片剪辑只连通其他帧导出单一的场景。
SWF8在运行时引入了丰富的图像效果而不影响文件的大小。新的位图滤镜包括模糊、阴影、发光、导角、渐变发光、渐变导角、颜色矩阵和其他的能应用在显示对象之上的,PlaceObject3标签中FILTERLIST和FILTER记录的效果。
SWF8以后的版本,使用混合模式将显示对象的图片或者图片按钮和下层进行效果合成成为了可能。通过PlaceObject3标签和Button record,可以在正常和透明混合之间任选一种混合模式。
回放性能能够通过位图缓存来进行优化。通过PlaceObject3标签可以指定一个静态的影片剪辑或者一个按钮原件在运行时作为位图缓存起来。Flash播放器在内部缓存显示对象而不用频繁重新绘制图像,这种方式能够为某些特定需求下的回放性能提供重要的改进方式。
DefineShape4和DefineMorphShape2标签中的LINESTYLE2和MORPHLINESTYLE2的记录信息,在以前一版本的SWF文件的基础上允许使用新的接合、端点填充轮廓。当时较早的线型记录只允许圆角结合和圆角端点,而LINESTYLE2和MORPHLINESTYLE2还能支持尖角、斜角接合和方形端点、无端点。同时新的线型也包括了纠正直线和竖线模糊的笔触提示。
SWF8加强了渐变的控制。FILLSTYLE和新的FOCALGRADIENT记录增加了新的放射渐变类型并允许设置焦点。此外GRADIENT记录现在可以有多达15个控制点,SWF7以前只有8个控制点
DefineFont3,DefineFontAlignZones和CSMTextSettings标签为Flash播放器带来了新的抗锯齿技术。高级文本渲染引擎能够完成高质量的字体渲染,尤其在小字号的时候也能看起来很舒服。
DefineScalingGrid标签引入了9切片的概念,允许Sprite和按钮保证完整性的情况下进行更好的局部缩放。
SWF6以后,Flash Player8支持就高保真On2 VP6流式格式——一种先进的视频压缩算法。另外,Flash Player8增加了对Alpha通道的支持在视频中能够使用透明效果。
SWF6支持屏幕视频V2流式格式,它是屏幕视频流式格式(Screen video bitstream format)的扩展,Flash Player8以后的版本支持这种格式。这种格式使用了特殊的技术来减少数据量来描述屏幕内容。
从SWF8开始,SWF文件必须用新的FileAttributes标签作为第一个标签。这个标签标识SWF文件自己的特征。
在SWF8中,FileAttributes标签有两个目的。此标签表明SWF文件中是否包含SymbolClass标签,同时使用像title和description这样的属性来为外部处理进行描述,比如提供给搜索引擎。此外,对于本地播放的SWF文件,FileAttributes指定了Flash Player是本地访问还是网络访问。
SWF8以后的版本ImportAsset2标签替代了ImportAssets标签。具有ImportAssets的功能