2012-10-23 45 views
1

在我的時間線的第一幀,我有以下動作腳本:如何刪除一個事件監聽,AS3

stop(); 

ClickTAG.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true); 

function manageMouseOver(event:MouseEvent):void 
{ 
    play(); 
} 

我並不真正熟悉AS,但這個實現我想要的東西,即是在mouseOver上啓動時間線。但是,如果您稍後重複mouseOver和關閉swf,則可能會在時間軸的後面中斷動畫,例如,它會跳過時間軸延遲並在最後一幀後重新開始播放動畫。

如何在電影到達第二幀後刪除此偵聽器或阻止它運行?我不太瞭解AS的基本知識,所以謝謝你的幫助。

回答

1
function manageMouseOver(event:MouseEvent):void{ 
    event.currentTarget.removeEventListener(event.type, manageMouseOver); 
    play(); 
} 

這個簡單的代碼能夠在被調用後立即刪除事件。

+0

這是'removeEventListener',不' removeEvent'。此外,不要假定當前事件目標是首先添加事件偵聽器的對象,它可能會有所不同。在OPs的情況下,它應該是'clickTAG.removeEventListener(MouseEvent.ROLL_OVER,manageMouseOver,false)',與寫入完全相同(使用**標識監聽器函數和'useCapture'標誌來標識事件監聽器,第三個參數到'addEventListener'和'removeEventListener')。可以分別在兩個階段添加相同的偵聽器功能。 – amn

+1

@amn「另外,不要假定當前事件目標是首先添加事件偵聽器的對象」=>請仔細閱讀事件的AS3文檔。 'currentTarget'總是你調用'addEventListener'的對象。不過,感謝您注意'removeEventListener'上的拼寫錯誤。 – blue112

+0

謝謝!這工作完美。 –

1

便捷的方式在AS3

function manageMouseOver(event:MouseEvent):void 
{ 
    event.currentTarget.removeEventListener(event.type, arguments.callee); 

    play(); 
} 

刪除事件偵聽器有關詳細信息arguments.callee docs

+0

謝謝,在addListener賦值中調用函數時調用外部方法/處理函數時非常方便。 – Mark

1

在你的情況下,從對象本身刪除監聽器:

stop(); 

ClickTAG.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true); 

function manageMouseOver(event:MouseEvent):void 
{ 
    ClickTAG.removeEventListener(MouseEvent.ROLL_OVER, manageMouseOver) 
    play(); 
}