Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 4.16 KB

Note.md

File metadata and controls

54 lines (38 loc) · 4.16 KB

SWF 标准

显示列表

  1. 对象通过标签定义,每个对象存储在一个字典库中,通过唯一ID指定
  2. 从字典中选定字符,放于显示列表中,即将在下一帧显示的字符。
  3. 完成后显示列表的内容通过showFrame渲染到屏幕

这是对深度值(depth)的解释: 每个显示在显示列表上的角色都会被分配一个深度值。深度值决定了角色的堆叠顺序。深度值较低的角色会显示在深度值较高的角色下方。深度值为1的角色会显示在最底层。一个角色可以在显示列表中出现多次,但位于不同的深度层次。在任何给定的深度层次上,只能有一个角色存在。

这里角色对应原文character

控制显示列表:

  • PlaceObject: 添加角色到现实列表。
  • PlaceObject2PlaceObject3: 在显示列表中添加字符,或在指定深度修改字符。
  • RemoveObject:在显示列表中删除指定的角色。
  • RemoveObject2:删除指定深度的角色。
  • ShowFrame: 将像是列表中的内容渲染到显示器上。

较旧的标记 PlaceObjectRemoveObject 在 SWF 3 及更高版本中很少使用。

剪切层

Flash Player支持显示列表中的一种特殊对象叫做剪裁层。被指定为剪裁层的角色本身不会被显示,而是用来剪裁(或遮罩)放置在它上方的角色。PlaceObject2中的ClipDepth字段指定了剪裁层遮罩的最顶层深度。 例如,如果一个形状被放置在深度1处,并且ClipDepth设为4,那么从深度1到深度4之间(包括4)的所有角色都会被这个深度1处的形状遮罩。而放置在深度4以上的角色则不会被遮罩。 所以剪裁层的作用是将它上方的一定深度范围内的对象遮罩掉,形成一个可见的"剪窗"

创建和实现动画

  1. 用定义标签定义每一个character,每个character都有唯一的ID,并将其添加都字典中。

  2. 使用 PlaceObject2 标签将每个字符添加到显示列表中。每个 PlaceObject2 标签指定要显示的字符,以及以下属性:

    • 深度值,确定角色在z轴上的堆叠顺序
    • 变换矩阵,变换矩阵决定了被放置角色的位置、比例、因子和旋转角度。同一个角色可以以不同的变换矩阵被放置多次(在不同的深度上)。
    • 一个可选的颜色转换,用于指定应用于被放置角色的颜色效果。颜色效果包括透明度和颜色偏移。
    • 一个可选的名称字符串,用于标识被放置的角色,供SetTarget操作使用。SetTarget用于在精灵对象内执行操作。
    • 一个可选的ClipDepth值,用于指定被放置角色将被遮罩的最顶层深度。
    • 一个可选的比率值,用于控制当放置时如何显示形态角色。比率为零时显示形态的起始角色。比率为65535时显示形态的结束角色。
  3. 使用一个 ShowFrame 标签来将显示列表的内容渲染到屏幕上。

  4. 使用 PlaceObject2 标签来修改显示列表中的每个角色。 每个 PlaceObject2 标签都会为给定深度的角色分配一个新的变换矩阵。不需要指定角色ID,因为每个深度只能有一个角色。

  5. 使用 ShowFrame 标签来显示角色处于其新位置。 对于动画的每一帧,重复步骤 4 和 5。 如果一个角色在帧与帧之间没有变化,那么在每一帧后都不需要替换未改变的角色。

  6. 使用 RemoveObject2 标签从显示列表中移除每个角色。只需要深度值来识别要移除的角色。

影片剪辑

一旦定义好,就可以在主文件中使用 PlaceObject2 标签显示精灵。PlaceObject 中指定的变换会与精灵内部对象的变换相连接。这些对象的行为就像是精灵的子对象,所以当精灵移动时,精灵内部的对象也会随之移动。同样地,当精灵被缩放或旋转时,子对象也会被缩放或旋转。当精灵从显示列表中移除时,它会自动停止播放。

当精灵被放置在显示列表上时,可以使用 PlaceObject2 标签为其指定一个名称。这个名称用于识别精灵,以便主文件(或其他精灵)可以在精灵内执行操作。这通过 SetTarget 动作实现(参考 ActionSetTarget)。