2010-09-08 27 views
1

我有一些in-file动作脚本3.0代码。这段代码控制了舞台上的一些元素。这些元素每个都有一个Over,一个Out和一个Click事件。ActionScript 3.0 - 替代事件监听器声明?

我目前定义这些事件侦听器,像这样:

mc_hotspot.addEventListener(MouseEvent.MOUSE_OVER, lift); 
mc_hotspot.addEventListener(MouseEvent.MOUSE_OUT, setDown); 
mc_hotspot.addEventListener(MouseEvent.CLICK, select);; 
mc_spinspot.addEventListener(MouseEvent.MOUSE_OVER, spinspotOver); 
mc_spinspot.addEventListener(MouseEvent.MOUSE_OUT, spinspotOut); 
mc_spinspot.addEventListener(MouseEvent.CLICK, spinClick); 
mc_spinspot2.addEventListener(MouseEvent.MOUSE_OVER, spinspot2Over); 
mc_spinspot2.addEventListener(MouseEvent.MOUSE_OUT, spinspot2Out); 
mc_spinspot2.addEventListener(MouseEvent.CLICK, spin2Click); 
btn_back.addEventListener(MouseEvent.MOUSE_OVER, backOver); 
btn_back.addEventListener(MouseEvent.MOUSE_OUT, backOut); 
btn_back.addEventListener(MouseEvent.CLICK, backClick); 

正如你可以看到,这是一个非常漫长而曲折的定义这些元素的活动方式也有一个事件触发功能去与每个这些。

我将扩展该项目,以便尽快添加三个spinspots和一个或两个以上的按钮,我只是想知道是否有其他方法来定义和迎合这些事件。

在spinspots的情况下,所有over和out事件都是相同的,但每个都有自己的重复函数和listener。

在此先感谢

回答

2

你可以只建立类似的功能:

function addButtonEvents(mc:*,over:Function,out:Function,click:Function = null) { 
    mc.addEventListener(MouseEvent.MOUSE_OVER,over,false,0,true); 
    mc.addEventListener(MouseEvent.MOUSE_OUT,out,false,0,true); 

    //if we have an optional click event 
    if (click != null) 
     mc.addEventListener(MouseEvent.CLICK,click,false,0,true); 

} 

那么你可以添加所有三个事件中的一个电话即

addButtonEvents(mc_spinspot, spinspotOver, spinspotOut, spinClick); 
1

最好的办法是通过封装,使用over和out状态只会影响正在被超出或超出的项目,因此您可以创建一个spinspot类并在其中完成处理程序,并只担心点击处理程序父类。

否则你可以有一个over,out和click处理程序,然后根据事件的目标(if (ev.target == mc_spinspot))对事件进行排序,这样做你也可以有一个assignEvents函数,它给出了over,out和click responders通过变量

private function addEvents(obj:Sprite){ 
    obj.addEventListener(MouseEvent.MOUSE_OVER, overHandler); 
    obj.addEventListener(MouseEvent.MOUSE_OUT, outHandler); 
    obj.addEventListener(MouseEvent.CLICK, clickHandler); 

} 
addEvents(mc_spinspot);