2010-09-08 37 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);