2.5事件处理函数
说完了常用的事件,在来说说事件处理的两种不同方式。前面介绍的事件处理代码的方法是这样添加的:首先,选择将要捕获事件的对象(影片剪辑实例或者按钮),接着,打开脚本面板,然后编写“on 事件名称”的代码。比方说,如果我们要让一个影片剪辑实例捕捉mouseDown事件,那么可以先在场景中选择这个影片剪辑实例(假设其名称为movieClip_mc),然后为其设置如下等的代码。
onClipEvent(mouseDown) {
}
这种方法用起来简洁直观,但是它有一个缺点是——交互性不足。怎么说呢?这种方法建立起来的事件处理代码是“固定”的,不能在程序运行的过程中动态更改。比方说,我们如果我们希望这个影片剪辑在影片播放到第10帧的时候使用某一段代码来处理mouseDown事件,但是当影片播放到第20帧的时候,我们有需要另外一段代码来处理mouseDown事件。这样的应用你是不是没有遇到过,来举一个直观的例子说,我们都使用过电视机的遥控器,电视机的遥控器上很多按钮都是“多模态”的,也就是说,这些按钮在不同的状态下功能是不同的。调节声音的按钮在正常状态下是用来提高和减小音量的,但是如果你进入了颜色设置模式时,按同样的按钮调节的不再是音量而是颜色了。
仍然举上面的例子来说明,如果我们在影片的某一个帧中加入这样的代码
movieClip_mc.onMouseDown = function() {
}
就可以实现对事件处理代码的动态切换了。这个语句比较特殊,它是说,将影片剪辑实例movieClip_mc的onMouseDown事件处理代码用function()代替,而function()后面的大括号中就是新的事件处理代码。你可以影片中多次使用这种方法,只要每次后面function()函数的内容不同就可以实现事件处理代面的动态调整了。需要注意的时候,使用这种方法定义事件处理代码是,影片剪辑实例必须出现在场景中,当它从场景中消失后,事件处理代码将会自动删除,如果要再次使用,必须重新指定。如果想删除时间的处理代码可以使用 delete movieClip_mc.onMouseDown 这样的语句。
通常在编写比较复杂的程序时,我们都倾向于使用事件处理函数来为场景中的对象设置事件处理代码,因为这样可以通过一条事件线将绝大多数代码串起来,便于代码的维护和调试。否则的话代码分散在各个对象内部,容易使代码显得比较混乱,出了问题也不容易找出错误所在。