星期一, 2月 15, 2010

ActionScript3.0 中的事件流(Event)

說要記錄一下自己對AS3事件的心得
可是拖了好久..想寫什麼大概也忘了

手邊有一些資料,姑且記錄一下吧~

以下節錄自SILK ROUTE - AS3筆記-事件流(event flow)
寫的很棒,非常建議先讀過

0. 只有 DiplayObject (inherit from InteractiveObject?) 會有事件流,這也難怪,因為其實最複雜的 heirarchical structure,就是在 UI 介面了,其他的像是XML的讀取事件,或是Video的串流事件,根本不太需要用到 Event Flow,大概一個層級就可以解決了.


1. 如果事件發生端以下全部的物件都屬於 displayObject的話, useCapture(Listener) 設成 true,或是 bubbles(Event) 設成 true ,在事件發生以下的物件(以一層層疊來看),都是可以聽的到的, 只是執行順序不同而已.

2. 發生事件的本身應屬於 useCapture = false 的範圍(也就是包括在 bubble phase 裡), 所以當 useCapture= true的時候會聽不到自己.

3. 有些內定 bubbles= ture 的 Event(像是MouseEvent), 在發佈端 dispatchEvent(new Event(「dispatch」,false)); 把 bubble 的值設改成 false 的話,會阻斷 bubble 的回流過程,也就是如果 useCapture=false(內定) 的話,Listener會聽不到東西.


Custom Event


have to be in DisplayObject

* = default of

MouseEvent /

KeyBoardEvent


1

addEventListener

(「type」,func, useCapture))
O.dispatchEvent

(new Event (「type「,bubbles))
true true* o
false o
false true* o
false x

2

O.addEventListener

(「type」,func, useCapture))
O.dispatchEvent


(new Event (「type「,bubbles))
true true* x
false o
false true* o
false o

另外,也記錄一下一個重點
父swfload子swf時,子swf的事件強制bubble的話,可以在父swf監聽到
詳細情形還沒有研究過,待需要的時候再來研究好了( ̄▽ ̄#)﹏


參考:
SILK ROUTE - AS3筆記-事件流(event flow)
Adobe ActionScript 3.0 - 事件偵聽程式
Adobe ActionScript 3.0 - 處理外部資料

沒有留言:

張貼留言