【问题标题】:Dispatchevent not firing调度事件未触发
【发布时间】:2015-07-18 07:14:11
【问题描述】:

我有一个 fla 文件和 2 个类文件。在我的 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 的类文件:

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

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

【问题讨论】:

  • 调度与时间线代码相关的事件的扩展 Sprite 在哪里?如果它不是您收听的时间线的后代,它将永远不会收到该事件。在Stage 上发送和收听它应该可以解决您的问题。假设您的分派事件的精灵在显示列表中(例如,它一直是 addChild 到某物并且舞台属性不为空)

标签: actionscript-3 flash flash-cc


【解决方案1】:

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

如果您的调度精灵位于同一范围(时间线)或它的后代/子代,那么制作事件气泡(创建事件时的第三个参数)应该可以使其工作。 (或者你可以在捕获阶段收听)

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

解决此问题的最简单方法是发送并收听stage

stage.addEventListener(SubtitleLoadEvent.PASS_PARAMS, onProcessedEvent);

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

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

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

【讨论】:

  • 您好,谢谢您的回答。我在事件监听器之前添加了“阶段”并将我的函数更正为:function onProcessedEvent(e:SubtitleLoadEvent):void { 现在可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 2021-11-27
相关资源
最近更新 更多