向新帧发送影片剪辑非常简单。调用
gotoAndPlay()
或
gotoAndStop()
将使影片剪辑跳到指定为参数的帧编号。或者,您可以传递一个与帧标签名称匹配的字符串。可以为时间轴上的任何帧分配一个标签。为此,选择时间轴上的某一帧,然后在属性检查器的“帧标签”字段中输入一个名称。
当创建复杂的影片剪辑时,使用帧标签比使用帧编号具有明显优势。当动画中的帧、图层和补间变得很多时,应考虑给重要的帧加上具有解释性说明的标签来表示影片剪辑中的行为转换(例如,“离开”、“行走”或“跑”)。这可提高代码的可读性,同时使代码更加灵活,因为转到添加了标签的帧的 ActionScript 调用是指向单个引用(即“标签”,而不是特定帧编号)的指针。如果您以后决定将动画的特定片段移动到不同的帧,则无需更改 ActionScript 代码,只要将这些帧的相同标签保持在新位置即可。
为便于在代码中表示帧标签,ActionScript 3.0 包括了 FrameLabel 类。此类的每个实例均代表一个帧标签,并具有一个
name
属性(表示在属性检查器中指定的帧标签的名称)和一个
frame
属性(表示该标签在时间轴上所处帧的帧编号)。
为了访问与影片剪辑实例相关联的 FrameLabel 实例,MovieClip 类包括了两个可直接返回 FrameLabel 对象的属性。
currentLabels
属性返回一个包含影片剪辑整个时间轴上所有 FrameLabel 对象的数组。
currentLabel
属性返回一个字符串,该字符串包含在时间轴上最近遇到的帧标签的名称。
假设创建了一个名为
robot
的影片剪辑并已经为其动画的各个状态加上了标签。可以设置一个用于检查
currentLabel
属性的条件以访问
robot
的当前状态,如下面的代码所示:
if (robot.currentLabel == "walking")
{
// do something
}
Flash Player 11.3 和 AIR 3.3 向 FrameLabel 类中添加了
frameLabel
事件。您可以向表示帧标签的 FrameLabel 实例分配事件处理函数。在播放头进入帧时调度事件。
下面的示例为 MovieClip 的帧标签数组中的第二个帧标签创建 FrameLabel 实例。然后它为
frameLabel
事件注册事件处理函数:
var myFrameLabel:FrameLabel = robot.currentLabels[1];
myFrameLabel.addEventListener(Event.FRAME_LABEL, onFrameLabel);
function onFrameLabel(e:Event):void {
//do something
}