2010-03-09 16 views
3

我試圖找到正確的事件來聽,這將確保我的組件參數可供使用,所以我可以初始化我的組件。如何初始化Flash ActionScript 3(AS3)組件?

我在網上看到的大多數例子都使用附加到loaderInfo的Event.INIT。

loaderInfo.addEventListener(Event.INIT, initHandler); 

從我的經驗來看,該事件僅在電影的第一幀發生。

其他人使用Event.COMPLETE,它在Event.INIT之後觸發,以確保組件和參數可供使用。這次事件再次發生在電影的第一幀。這是有道理的,因爲它被附加到組件的loaderInfo屬性。

下面是一個非常簡單的組件的類,它顯示了我正在談論的內容。將此類附加到屬性對話框和組件定義對話框中的動畫片段(我不打算告訴你如何製作組件,因爲您可能知道),然後將生成的組件拖到舞臺上並設置「測試變量」參數設置爲「TEST_VAR_CHANGED」。

當您呈現的電影在第一幀的分量,你會看到:

constructor null 
initHandler TEST_VAR_CHANGED 
completeHandler TEST_VAR_CHANGED 

當您呈現的電影在第二幀的部分,你會只看到:

constructor null 

那麼......在我運行我的init處理程序之前,我要聽哪些事件來保證組件參數可用?

組件類:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class ComponentEventTest extends MovieClip 
    { 
     [Inspectable(name="Test var", type="String")] 
     public var testVar:String;  

     function ComponentEventTest() 
     { 
      trace('constructor', testVar); 
      loaderInfo.addEventListener(Event.INIT, initHandler); 
      loaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
     } 

     private function initHandler(evt:Event):void 
     { 
      loaderInfo.removeEventListener(Event.INIT, initHandler); 
      trace('initHandler', testVar); 
     } 

     private function completeHandler(evt:Event):void 
     { 
      loaderInfo.removeEventListener(Event.COMPLETE, completeHandler); 
      trace('completeHandler', testVar); 
     }   
    } 
} 

回答

2

編輯: 好吧,你可以等待第一幀渲染:

聆聽exit frame如果可用(Flash播放器10)或enter frame

function ComponentEventTest() 
    { 
     trace('constructor', testVar); 
     addEventListener(Event.ENTER_FRAME, initHandler); 
    } 

    private function initHandler(evt:Event):void 
    { 
     removeEventListener(evt.type, initHandler); 
     trace('initHandler', testVar); 
    } 
+0

感謝您的回覆。 實際上,ADDED_TO_STAGE事件發生在INIT事件之前,並且也將testVar顯示爲null。 – shawnc 2010-03-09 21:49:56

+0

對不起,我忘了它是一個組件,我已經編輯了答案。 – Patrick 2010-03-09 22:18:48

+0

感謝您的回答,但鏈接的頁面是AS2(AS3在2004年不存在),並沒有解決何時知道組件參數已加載並且組件初始化可以繼續的問題。 該示例僅假設當構造函數被調用時,您可以繼續進行初始化。 – shawnc 2010-03-09 22:48:21