2

我無法理解EnterFrame事件傳播所需的路徑。我知道事件有3個階段:捕獲,目標和冒泡。AS3EnterFrame事件傳播理解問題

當我看到flash.events.Event類時,我發現該事件不是Bubble。

如果我在任何DisplayObject上添加Eventlistener,它會收到Enter幀事件。 如果我對useCapture = true做同樣的事情沒有收到事件。

但是不應該所有的事件都通過捕獲階段嗎? 如果我檢查事件目標,它將返回接收的DisplayObject作爲其目標。

傳播時EnterFrame事件的目標是否被更改,或者是創建並傳遞給每個DisplayObject的新事件?

Flash是否與所有DisplayObjects保持分隔的List?因爲DisplayObject未添加到顯示樹時甚至會收到EnterFrame事件?

+2

這是有趣的。 ENTER_FRAME事件似乎與其他行爲不同。 1)如你所說,它沒有經過捕獲階段,2)如果我將輸入幀偵聽器添加到多個對象,似乎每個對象都會收到它自己的輸入幀事件(在調試器中,每個事件都有不同的內存地址, 3)似乎進入幀事件被重新使用(相同的存儲器地址一直顯示在調試器中)。正如你可以想象的那樣,這個事件經常發生,我們所看到的行爲可能是Flash Player的優化。 –

+2

在這個[senocular.com上的頁面](http://www.senocular.com/flash/tutorials/orderofoperations/)的底部,他們討論了「廣播事件」(涉及多個對象的事件)。我從來沒有聽說過這個術語,關於Flash中的事件。我可以想象,廣播事件的行爲與我們習以爲常的捕捉 - >目標 - >泡沫範式不同(正如您的問題/我的評論中所述)。希望我仍然有我的[Collin Moock](http://shop.oreilly.com/product/9781565928527.do)書... –

+0

@Sunil D.在你的鏈接中有一些非常好的信息。 –

回答

2

ENTER_FRAME (from AS3 Reference)

此事件既不具有「捕獲相位」,也不是「泡沫相」,這 意味着事件偵聽器必須直接添加到任何潛在 目標,無論目標是否在顯示列表中。

所以回到你的問題(S):

如果我上它接收到任何的DisplayObject添加事件偵聽回車 幀事件。如果我使用useCapture = true做同樣的事情,沒有收到事件 。

將useCapture = TRUE //這不會做任何事情,因爲ENTER_FRAME沒有「捕獲階段」

但不宜所有活動通過捕獲階段?

只有當我檢查事件具有「捕獲階段」

事件的目標是返回接收一DisplayObject作爲其目標。

這是正確的

是否爲enterFrame事件目標得到改變,而傳播 或者是創造並傳遞到每個DisplayObject一個新的事件?

它被單獨發送給每個目標。

Flash是否與所有DisplayObject保持分離的List?因爲DisplayObject沒有被添加到顯示樹 時,甚至會收到 EnterFrame事件?

這是回答蘇尼爾d評論

+0

我不知道這些年來我是如何錯過關於在文檔中沒有捕獲或冒泡階段的事件的註釋。 –

+0

哇謝謝你們提供的鏈接真的很有用。有趣的是,一些事件的行爲有所不同。 – user1090755