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

如何初始化Flash ActionScript 3(AS3)组件?,flash,actionscript-3,Flash,Actionscript 3,我正在试图找到要侦听的正确事件,这将确保我的组件参数可用,以便我可以初始化我的组件 我在网上看到的大多数示例都使用附加到loaderInfo的Event.INIT loaderInfo.addEventListener(Event.INIT, initHandler); 根据我的经验,那个事件只在电影的第一帧发生 其他人使用Event.COMPLETE,它在Event.INIT之后激发,以确保组件和参数可供使用。再一次,这一事件似乎只在电影的第一帧发生。这是有意义的,因为它附加到组件的load

我正在试图找到要侦听的正确事件,这将确保我的组件参数可用,以便我可以初始化我的组件

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

loaderInfo.addEventListener(Event.INIT, initHandler);
根据我的经验,那个事件只在电影的第一帧发生

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

下面是一个非常简单的组件的类,它正好显示了我所说的内容。将该类附加到Properties对话框和Component Definition对话框中的movieclip(我不会告诉您如何制作组件,因为您可能知道),然后将生成的组件拖到stage并将“Test var”参数设置为“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);
        }        
    }
}
编辑: 确定可以等待渲染第一帧:

收听
退出帧
如果可用(flash player 10)或
输入帧

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

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

谢谢你的回复。实际上,添加的_TO_STAGE事件发生在INIT事件之前,并将testVar显示为null。很抱歉,我忘记了它是一个组件,我已经编辑了答案。感谢您的回答,但是链接页面是AS2(2004年不存在AS3)并且不能解决何时知道组件参数已加载以及组件初始化可以继续的问题。这个例子只是假设当调用构造函数时,您可以继续初始化。:-)是的,我知道,但AS2组件的工作方式与AS3不同。使用AS2,您可以处理onLoad事件,一切都会很好。AS3似乎没有显式的“I am initialized”事件,除非您侦听组件加载程序,然后它只在第1帧上工作。不过,谢谢您的尝试!:-)是的,你完全正确。我为movieclip可以侦听的所有事件添加了侦听器,EXIT_FRAME事件是在第1帧和第1帧(第2帧+)之外的第一个事件,其中组件参数已完全加载。有趣的是,每个人似乎都在loaderInfo对象上侦听INIT或COMPLETE。EXIT_框架实际上在INIT和COMPLETE之前触发,并已完全加载组件参数。很甜蜜。谢谢