2010-03-15 58 views
3

在ActionScript 3,大多數事件使用捕捉/目標/泡模型,這是相當流行時下:AS3中的自定義廣播事件?

當事件發生時,其移動通過事件流的三個階段:捕獲階段,其從顯示列表層次結構的頂部流向恰好在目標節點之前的節點;目標階段,其包括目標節點;以及從目標節點之後的節點流出的冒泡階段備份顯示列表層次結構。

但是,某些事件(例如Sprite類的enterFrame事件)不會捕獲OR泡泡 - 您必須直接訂閱目標以檢測事件。文件將這些稱爲「廣播事件」。我認爲這是出於性能方面的原因,因爲這些事件將不斷爲每個精靈階段觸發,並且你不想處理所有多餘的事件傳播。

我想發送我自己的廣播事件。我知道你可以防止冒泡事件(Event.bubbles = false),但是你能否擺脫捕捉?

回答

0

氣泡和捕獲階段都是整個冒泡機制的一部分。如果bubbles設置爲false,則兩者都不存在。

+0

甜蜜,謝謝。 AS3文檔的某些部分確實......不清楚。 – Ender 2010-03-15 20:43:44

+0

「氣泡」屬性隻影響冒泡階段,捕捉階段依然存在。嘗試捕捉「ADD_TO_STAGE」事件的所有階段,例如 – Yarg 2012-06-07 11:02:15

1

back2dos的答案是錯誤。其實Event.bubbles屬性不影響捕捉階段。

public class CaptureTextInput extends Sprite 
{ 
    function CaptureTextInput() 
    { 
    var t:TextField = new TextField(); 
    t.type = TextFieldType.INPUT; 
    addEventListener(TextEvent.TEXT_INPUT, function(event:TextEvent):Void 
    { 
     trace("captured"); // This event will be triggered properly when you type in text field. 
    }, true); 
    addChild(t); 
    } 
} 
0

如果您擺脫泡沫和捕捉階段,那不會使它成爲廣播事件。廣播事件的特殊之處在於,當調度一個事件時,無論在顯示列表上還是在顯示列表之外,每個監聽器都會被觸發。如果有辦法派發自己的廣播事件,我不知道它是什麼。

+0

爲什麼進行投票?如果我說了一些不準確的話,我希望你解釋一下。 – 2015-04-29 17:59:20