Dispatchevent 未触发

Dispatchevent not firing

我有一个 fla 文件和 2 个 class 文件。在我的 fla 上,我有:

addEventListener(SubtitleLoadEvent.PASS_PARAMS, onProcessedEvent);

function onProcessedEvent(e:Event):void {
    trace(e.currentTarget);
}

SubtitleLoadEvent.as :

package
{
    import flash.events.Event;

    public class SubtitleLoadEvent extends Event
    {
        public static const PASS_PARAMS:String = new String("passparams");
        public var resultArr:Array = new Array();

        public function SubtitleLoadEvent(type:String, arr:*, bubbles:Boolean = false,
                                                cancelable:Boolean = false):void
        {
            this.resultArr = arr;
            super(type, bubbles, cancelable);
        }

        override public function clone():Event
        {
            return(new SubtitleLoadEvent(type, resultArr, bubbles, cancelable));
        }
    }
}

我有一个扩展 sprite 的 class 文件:

dispatchEvent(new SubtitleLoadEvent(SubtitleLoadEvent.PASS_PARAMS, cleanArr));

但是电影没有输出任何东西。我该如何解决这个问题?

由于您的事件不会冒泡,因此您的时间线代码将听到该事件的唯一方式是它是否在同一范围内分派(这里不太可能是这种情况)。

如果您的调度 sprite 在相同的范围(时间轴)或它的 descendant/child 上,那么使事件冒泡(创建事件时的第三个参数)应该可以使它起作用。 (或者您可以在捕获阶段收听)

否则,您将需要在两个对象的某个共同父对象上侦听事件。

解决此问题的最简单方法是在 stage:

上调度和监听
stage.addEventListener(SubtitleLoadEvent.PASS_PARAMS, onProcessedEvent);

stage.dispatchEvent(new SubtitleLoadEvent(SubtitleLoadEvent.PASS_PARAMS, cleanArr));

这假设您的调度精灵已添加到显示列表中。如果不是,则阶段 属性 将为空。如果它不在显示列表中,那么它将不起作用。

要详细了解事件的工作原理及其生命周期,您可以read this article