播放一个 swf 文件的一帧,需要以下三个步骤:
1 定义需要使用的 DefineShape, DefineSprite 这种定义型 tag;
这些 tag 以及 character id 会在解析时存储到字典中。
2: 从字典里将定义型 tag 的 character id 复制并放到播放列表 (display list) 中,这就是下一帧要播放的 charater id.
3: 当这些完成后,使用 ShowFrame tag 将内容渲染到屏幕上。
一个 Depth 值会传给播放列表上的各个 character, Depth 决定了播放列表的存储顺序。等级比较低的会放在等级高的下面。 Depth 为 1 的 character 会在栈的最底层播放。一个 character 可以在播放列表出现多次,但是必须是不同的 depth. 值。
SW1,2 中, 播放列表是一个平级的一系列对象,而在 sw3 后的版本中,播放列表是分级的列表,一个列表中可能还会有子列表。
播放列表相关的控制型 tag:
PlaceObject: 添加一个 character 到播放列表
PlaceObject2 & PlaceObject3 : 添加一个 character 到播放列表,或者在制定的 depth 修改 charater.
RemoveObject: : 移除播放列表中指定的 character.
RemoveObject2 : 移除指定 depth 上的 character
ShowFrame : 渲染播放列表上的内容。
裁剪层
播放器支持一种特殊的对象:裁剪层。 它并不会播放而是对上面的对象进行裁剪或者 mask 处理。
播放列表的使用流程:
1 : 定义定义型 ta g
2 : 通过 PlaceObject2 将 character 放入播放列表。 PlaceObject2 带有下面的几点属性值:
Depth ;
transformation matrix : 决定了位置坐标,缩放,选装角度等图形属性。一个相同的 character 可以以不同 matrix 放在不同的 depths 多次
optional color transform : 指定包含透明度以及颜色转换等色彩效果
optional name string, 确认 SetTarget 行为
ClipDepth value : 指定 mask 操作的最顶层 depth
ratio value 。
3.ShowFrame :
4: PlaceObject2 修改播放列表上的每个 character, 为每个 character 赋给了一个新的 ctm.
5: ShowFrame : 在他们新的位置显示
重复上面的 4,5 操作。
6 : RemoveObject2 移除播放列表上的每一个 character.