【翻译】SWF结构规范第四章:显示列表(三)
显示列表标签Display List Tags
显示列表标签用于给显示列表添加角色和角色的属性。
PlaceObject
PlaceObject标签为显示列表添加一个角色。CharacterId决定往显示列表中添加的角色,Depth字段决定深度层,Matrix字段指定角色的位置,比例和旋转度。若PlaceObject标签超过了转换矩阵的限度,则会为记录附加一个ColorTransform字段。
这就为角色具体指定了一个颜色效果(比如透明度),一个角色可以被多次添加入显示列表,只要他们含有不同的深度和转换矩阵。
注意:PlaceObject标签很少用于SWF 3及以后的版本,在SWF 3和以后的版本中,PlaceObject由PlaceObject2取代。
所支持的最小文件版本是SWF 1。
PlaceObject
字段 类型 注释
Header RECORDHEADER 标签类型=4
CharacterId UI16 被放置的角色的ID
Depth UI16 角色的深度
Matrix MATRIX 转换矩阵的数据
ColorTransform(可选) CXFORM 颜色转换的数据
PlaceObject2
PlaceObject2扩展了PlaceObject标签的功能,PlaceObject2标签可以给显示列表添加角色或者修改已经处于显示列表中的角色的属性。Flash 4和flash 5中PlaceObject2标签稍微有些改变,Flash 5加入了剪切动作(clip actions)。
标签开始于一组标记,这些标记指出现有哪些字段在标签内。可选字段为CharacterId,Matrix, ColorTransform,Ratio,ClipDepth,Name和ClipActions,只有Depth是唯一一个一直需要的字段。
深度值控制了显示的角色的层次。低深度的角色在高深度的角色之下。深度为1的角色显示于最底处。显示列表种可以有多个相同的角色,但它们必须处于不同的深度,一个深度只能容纳一个角色。也就是说,角色可以由自己的深度来标明(因此CharacterId是可选项)
PlaceFlagMove和PlaceFlagHasCharacter指出一个新的角色是否被添加入显示列表,或显示列表中的一个角色是否被修改。这两个标记的含义如下:
• PlaceFlagMove = 0并且PlaceFlagHasCharacter = 1
一个新的角色(带有ID或CharacterId)被指定具体的深度并且放置于显示列表。其他字段设置新角色的属性。
• PlaceFlagMove = 1并且PlaceFlagHasCharacter = 0
指定深度的角色被修改。其他字段修改这个角色的属性。因为一个深度只能含有一个角色,所以CharacterId为可选字段。
• PlaceFlagMove = 1并且PlaceFlagHasCharacter = 1
指定深度的角色被移除,同时新角色(带有ID或CharacterId)被放置于该深度。其他字段设置新角色的属性。
比如一个在几帧之内做运动的角色,它的PlaceFlagHasCharacter在第一帧被设置,之后的几帧PlaceFlagMove被设置。第一帧时该角色被放置在指定的深度,然后初始化转换矩阵,之后的几帧仅仅替换该角色的转换矩阵即可。
PlaceObject2标签的可选字段有如下含义:
• CharacterId字段指定被添加入显示列表的角色。只有在添加新角色时使用。如果已经在显示列表的角色被修改了,则会缺少CharacterId字段。
• Matrix字段指定了添加或者修改的角色的位置,比例,旋转度。
• ColorTransform字段指定了添加或者修改的角色所运用的颜色效果。
• Ratio字段指定了添加或修改的对象的形素比(morph ratio),仅当该角色定义DefineMorphShape时该字段才会有用。并且控制形素进行的程度。若为0则在形态的开始就显示。ratio值为65535,则角色在形态结束时显示。在0至65535之前的值,flash Player会在形状开始和形状结束之间修改,并且显示一个中间形状。
• ClipDepth字段指定了被放置的角色遮住的最大深。ClipDepth为0则表示该角色不是一个剪切角色(clipping character)。
• Name字段指定添加或者修改的角色的名称,该字段仅用于精灵(sprite)角色。为SetTarget动作标识精灵。它允许主影片(或者其他精灵)在精灵内部执行动作(参看精灵和影片剪辑)。
• ClipActions字段,仅用于放置精灵角色,定义多个事件处理器。
所支持的最小文件版本是SWF 3。








