2011-02-13 71 views
1

據說在docs中,EventDispatcher的dispatchEvent「...將事件分派到事件流中」。這句話很好看,並沒有真正解釋任何事情。flash dispatchEvent如何真正起作用?

說,有兩個偵聽等待一個事件的對象「A」,「A」,那麼我們必須期望在呼喚什麼樣的行爲:

a.dispatchEvent(「A」)?

在從distpatchEvent返回之前是否會立即調用這兩個偵聽器?或者他們會在某個內部Flash播放器隊列中排隊,並將通過輸入下一幀進行處理?我們可以依賴Flash Player的某些已定義的行爲嗎?或者行爲未定義?如何閱讀「將事件分派給事件流」?這個問題很重要,因爲在實踐中它會影響代碼的控制流程。

回答

0

只需使用信號來代替:P

https://github.com/robertpenner/as3-signals/wiki

不,但真的,它們非常易於使用和理解,是AS3工具箱的一個很好的補充。

您還可以通過閱讀Rob Penner的評論(向下滾動至wiki頁底部)瞭解很多關於本機AS3事件的信息

2

這一切都取決於您的顯示列表層次結構。

Flash的事件結構基於其internal event model

  1. 舞臺將是第一對象 通知,然後該事件將 涓滴直到 到達其目標顯示列表中。這個階段是 ,稱爲捕獲階段。要啓用它,請在事件偵聽器上將useCapture設置爲 true。請注意0​​這樣做毫無意義,除非 對象偵聽是針對該事件的對象的父項。這個 被稱爲事件攔截

  2. 下一階段是目標 階段。這是最常見的與事件相關的行爲。 目標顯示對象( 有一個事件監聽器)將 接收事件並在監聽器中執行 代碼。

  3. 最後階段稱爲 冒泡階段。這是事件在收到事件後顯示列表 的事件。因爲 需要知道如何偵聽由對象的 孩子發送的 事件,所以事件冒泡對於調度自定義事件的 非常重要。

當調度一個事件,我一般都用這個語法(Event.CHANGE僅僅是一個常見的例子):

Object.dispatchEvent(new Event("CHANGE", true, false));

Object是你從調度的對象。第一個參數是您正在調度的事件。第二個是bubbles參數。最後是cancelable屬性。 Event.cancelable用於通過Event.preventDefault()防止事件(IE:鼠標單擊)的默認操作。

參考:

相關問題