首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何初始化Flash ActionScript 3 (AS3)组件?

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

Stack Overflow用户
提问于 2010-03-09 20:31:54
回答 1查看 7.3K关注 0票数 4

我试图找到要侦听的正确事件,这将确保我的组件参数可供使用,这样我就可以初始化组件。

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

代码语言:javascript
复制
loaderInfo.addEventListener(Event.INIT, initHandler);

根据我的经验,这个事件只会在电影的第一帧发生。

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

下面是一个非常简单的组件的类,它准确地显示了我所说的内容。将这个类附加到Properties对话框和Component Definition对话框(我不会告诉您如何制作组件,因为您可能知道),然后将生成的组件拖到舞台上,并将"Test“参数设置为"TEST_VAR_CHANGED”。

当您在第一个框架中使用组件呈现电影时,您将看到:

代码语言:javascript
复制
constructor null
initHandler TEST_VAR_CHANGED
completeHandler TEST_VAR_CHANGED

当您使用第二个框架中的组件呈现电影时,您只会看到:

代码语言:javascript
复制
constructor null

在运行init处理程序之前,是否侦听So...which事件以确保组件参数可用?

组件类:

代码语言:javascript
复制
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);
        }        
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-09 21:29:16

编辑: Ok您可以等待第一个帧被呈现:

如果可用,可以收听exit frame (闪存播放器10)或enter frame

代码语言:javascript
复制
    function ComponentEventTest()
    {
        trace('constructor', testVar);
        addEventListener(Event.ENTER_FRAME, initHandler);
    }

    private function initHandler(evt:Event):void
    {
        removeEventListener(evt.type, initHandler);
        trace('initHandler', testVar);
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2412325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档