2011-04-19 35 views

回答

2

僅當您明確使用stage.invalidate()時才被調用;

您應該注意與Event.RENDER的偵聽器相關的某些錯誤和特殊考慮事項(或者至少在FP9中有錯誤,這是我最後一次積極使用stage.invalidate)。

  1. 不管有多少不同的對象監聽Event.RENDER事件,如果他們中的一個,甚至調用removeEventListener(Event.RENDER ......然後所有聽衆都被刪除。據我所知,回報是唯一在發生這個錯誤(或FP9使用)事件

  2. 不能使用stage.invalidate()爲Event.RENDER處理的內部。既然你爲了觸發會只調用stage.invalidate渲染處理程序,這應該不會成爲問題。

編輯:在下面的評論bigp進行了有效的觀察,Flex可能確實使用stage.invalidate下引擎蓋。把我的答案作爲一個嚴格適用於香草AS3而沒有任何附加框架(如Flex)的答案。

+0

如果你使用stage.invalidate(),它會被調用每一幀嗎? – redconservatory 2011-04-19 19:11:03

+1

當你顯式調用stage.invalidate()時,它僅被**調用。如果您在ENTER_FRAME處理程序中調用stage.invalidate,那麼是的。否則,不。你通常*不會在ENTER_FRAME處理程序中調用它。它旨在成爲在呈現之前對顯示列表進行「最後一刻」更新的一種方式。不幸的是,這並不總是成功的。如果您的目標是FP10,則可以更好地利用其他幀事件(如FRAME_CONSTRUCTED或EXIT_FRAME)更好地控制事件發生的時間。你需要什麼?RENDER爲了什麼? – scriptocalypse 2011-04-19 19:14:26

+0

我認爲這是一個部分正確的答案。在Flex應用程序中,可以通過外觀變化(翻轉,轉換,效果,補間)來觸發。它可能在內部調用'stage.invalidate();'方法,但我認爲值得注意的是,Flex可以在任何地方處理視覺元素可能發生的變化。 – bigp 2011-04-19 19:18:07