如何初始化Flash ActionScript 3(AS3)组件?

时间:2010-03-09 20:31:54

标签: flash actionscript-3

我正在尝试找到正确的事件来监听,这将确保我的组件参数可供使用,因此我可以初始化我的组件。

我在网上看到的大多数示例都使用了附加到loaderInfo的Event.INIT。

loaderInfo.addEventListener(Event.INIT, initHandler);

根据我的经验,该事件仅在电影的第一帧触发。

其他人使用在Event.INIT之后触发的Event.COMPLETE,以确保组件和参数可供使用。再一次,这个事件似乎只在电影的第一帧开始。这是有道理的,因为它附加到组件的loaderInfo属性。

下面是一个非常简单的组件的类,它正好显示了我正在谈论的内容。将此类附加到“属性”对话框和“组件定义”对话框中的动画片段(我不打算告诉您如何制作组件,因为您可能知道),然后将生成的组件拖到舞台上并设置“Test var”参数为“TEST_VAR_CHANGED”。

使用第一帧中的组件渲染影片时,您将看到:

constructor null
initHandler TEST_VAR_CHANGED
completeHandler TEST_VAR_CHANGED

使用第二帧中的组件渲染影片时,您只会看到:

constructor null

所以......在我运行初始化处理程序之前,我会听哪个事件保证组件参数可用?

组件类:

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);
        }        
    }
}

1 个答案:

答案 0 :(得分:2)

修改 好的,你可以等待第一帧渲染:

聆听exit frame(如果有)(flash player 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);
    }