在范例 SWF 文件 zapper.swf 中,当用户将瓢虫拖到电源插座时,瓢虫会下落,并且插座会抖动。主时间轴只有一个帧,包含三个对象:瓢虫、插座和重置按钮。这些对象中的每一个都是一个影片剪辑实例。
SWF 文件中有一个脚本;它被附加到 bug
实例,如下面的“动作”面板中所示:
带有附加到 bug 实例的脚本的“动作”面板
瓢虫的实例名称为 bug
,插座的实例名称为 zapper
。在脚本中,this
即指瓢虫,因为脚本就附加到瓢虫上,而保留字 this
引用包含脚本的对象。
有两个 onClipEvent()
处理函数,它们各有一个不同的事件:load
和 enterFrame
。onClipE
语句中的动作仅在 SWF 文件加载时执行一次。
vent(load)onClipEvent(enterFrame)
语句中的动作在每次播放头进入帧时都执行。即使在只有一个帧的 SWF 文件中,播放头仍然会反复进入该帧,而且脚本会重复执行。下面的动作会在每个 onClipEvent()
处理函数中发生:
onClipEvent(load) initx
和 inity
这两个变量被指定用于存储 bug
影片剪辑实例的初始 x 和 y 位置。为 Reset 实例的 onRelease
事件定义并分配了一个函数。每次用鼠标按钮按下和松开“重置”按钮时都会调用此函数。该函数将瓢虫重放回到它在舞台上的开始位置,重置它的旋转和 alpha 值,并且将 zapped
变量重置为 false
。
onClipEvent(enterFrame) if
条件语句使用 hitTest()
方法检查瓢虫实例是否触到了插座实例 (_root.zapper
)。该计算具有两种可能的输出结果,即 true
或 false
:
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
实例,它们具有两个不同的事件:press
和 release
。在 bug
实例上按下鼠标按钮时,会执行 on(press)
语句中的动作。在 bug
实例上松开鼠标按钮时,则会执行 on(release)
语句中的动作。下面的动作会在每个 onClipEvent()
处理函数中发生:
on(press) 一个 startDrag()
动作,使瓢虫可以拖动。因为脚本被附加到 bug
实例,所以关键字 this
表明可拖动的是 bug
实例:
on (press) { this.startDrag(); }
on(release) 一个 stopDrag()
动作,可以停止拖动动作:
on (release) { stopDrag(); }