我有一个fla文件和2个类文件。在我的脸上我有:
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));
}
}
}
我有一个扩展精灵的类文件:
dispatchEvent(new SubtitleLoadEvent(SubtitleLoadEvent.PASS_PARAMS, cleanArr));
但电影没有输出任何东西。我该如何解决这个问题?
答案 0 :(得分:1)
由于您的活动没有冒泡,因此您的时间线代码听到该事件的唯一方法是在相同的范围内调度(这种情况不太可能如此)。
如果您的调度精灵位于同一范围(时间轴)或它的后代/子节点上,那么使事件气泡(创建事件时的第三个参数)应该可以使它工作。 (或者你可以听捕捉阶段)
否则,您需要在两个对象的某个公共父级上侦听事件。
解决此问题的最简单方法是发送和收听stage
:
stage.addEventListener(SubtitleLoadEvent.PASS_PARAMS, onProcessedEvent);
stage.dispatchEvent(new SubtitleLoadEvent(SubtitleLoadEvent.PASS_PARAMS, cleanArr));
这假定您的调度精灵已添加到显示列表中。如果不是,则stage属性将为null。如果它不在显示列表中,那么它将无效。
要了解有关活动如何运作及其生命周期的更多信息,您可以read this article。