分析范例脚本

在范例 SWF 文件 zapper.swf 中,当用户将瓢虫拖到电源插座时,瓢虫会下落,并且插座会抖动。主时间轴只有一个帧,包含三个对象:瓢虫、插座和重置按钮。这些对象中的每一个都是一个影片剪辑实例。

SWF 文件中有一个脚本;它被附加到 bug 实例,如下面的“动作”面板中所示:

带有附加到 bug 实例的脚本的“动作”面板

瓢虫的实例名称为 bug,插座的实例名称为 zapper。在脚本中,this 即指瓢虫,因为脚本就附加到瓢虫上,而保留字 this 引用包含脚本的对象。

有两个 onClipEvent() 处理函数,它们各有一个不同的事件:loadenterFrameonClipE
vent(load)
语句中的动作仅在 SWF 文件加载时执行一次。onClipEvent(enterFrame) 语句中的动作在每次播放头进入帧时都执行。即使在只有一个帧的 SWF 文件中,播放头仍然会反复进入该帧,而且脚本会重复执行。下面的动作会在每个 onClipEvent() 处理函数中发生:

onClipEvent(load) initxinity 这两个变量被指定用于存储 bug 影片剪辑实例的初始 x 和 y 位置。为 Reset 实例的 onRelease 事件定义并分配了一个函数。每次用鼠标按钮按下和松开“重置”按钮时都会调用此函数。该函数将瓢虫重放回到它在舞台上的开始位置,重置它的旋转和 alpha 值,并且将 zapped 变量重置为 false

onClipEvent(enterFrame) if 条件语句使用 hitTest() 方法检查瓢虫实例是否触到了插座实例 (_root.zapper)。该计算具有两种可能的输出结果,即 truefalse

onClipEvent (load) {
  initx = _x;
  inity = _y;
  _root.Reset.onRelease = function() {
    zapped = false;
    _x = initx;
    _y = inity;
    _alpha = 100
    _rotation = 0;
  };
} 

如果 hitTest() 方法返回 true,则调用 stopDrag() 方法,zapper 变量设置为 true,alpha 和旋转属性会被更改,并会通知 zapped 实例进行播放。

如果 hitTest() 方法返回 false,则不会运行紧跟在 if 语句后面大括号 ({}) 内的任何代码。

有两个 on() 处理函数附加到 bug 实例,它们具有两个不同的事件:pressrelease。在 bug 实例上按下鼠标按钮时,会执行 on(press) 语句中的动作。在 bug 实例上松开鼠标按钮时,则会执行 on(release) 语句中的动作。下面的动作会在每个 onClipEvent() 处理函数中发生:

on(press) 一个 startDrag() 动作,使瓢虫可以拖动。因为脚本被附加到 bug 实例,所以关键字 this 表明可拖动的是 bug 实例:

on (press) {
  this.startDrag();
}

on(release) 一个 stopDrag() 动作,可以停止拖动动作:

on (release) {
  stopDrag();
}