如何解决AS3:自定义事件传播
| 我正在尝试组装一系列由外部加载的swfs组成的投影仪,我的一般问题将尽可能简短。 如果加载到ctrl
中的外部swf(在创作过程中放在舞台上的MovieClip实例)在其第一帧和最后一帧中具有:
dispatchEvent(new Event(\"FirsT_FRAME\")); // in the first frame,and:
dispatchEvent(new Event(\"LAST_FRAME\")); // in the last frame
那么-这些事件是否应该在ctrl容器中被“听到”?
目前,我似乎只能监听加载的内容中的那些事件,而不是“更高”,我的意思是-如果我在加载程序完整监听器中说:
mc:MovieClip = MovieClip(e.currentTarget.content);
mc.addEventListener(\"LAST_FRAME\",function(){ // something });
然后听到事件,但是当我说:
ctrl.addEventListener(\"LAST_FRAME\",function(){ // something });
后者似乎更强大,因此我正在努力使其发挥作用,但是我想我已经错过了一些教训;-)
有人经历过这个吗?我的方法是正确的还是应该走另一条路?
欢呼大家。
解决方法
通过在分派事件时将bubbles选项设置为true,可以使“ 4”显示对象接收从外部swf分派的事件。请看以下示例,其中将SWFB.swf加载到SWFA.swf中:
SWFB:
package swfb
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE,init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
const SECOND:int = 1000;
var timer:Timer = new Timer(5 * SECOND,1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE,onTimerComplete);
timer.start();
}// end function
private function onTimerComplete(e:TimerEvent):void
{
dispatchEvent(new TimerEvent(TimerEvent.TIMER_COMPLETE,true,true));
}// end function
}// end class
}// end package
SWFA:
package swfa
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.net.URLRequest;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE,init);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderComplete);
loader.load(new URLRequest(\"swf/SWFB.swf\"));
}// end function
private function onLoaderComplete(e:Event):void
{
var loaderInfo:LoaderInfo = LoaderInfo(e.target);
var container:Sprite = new Sprite();
container.addChild(loaderInfo.content);
container.addEventListener(TimerEvent.TIMER_COMPLETE,onContainerTimerComplete);
addChild(container);
}// end function
private function onContainerTimerComplete(e:TimerEvent):void
{
trace(\"TIMER COMPLETE!\");
e.stopPropagation();
}// end function
}// end class
}// end package
将SWFB.swf添加到舞台5秒后,将调度a7ѭ事件。调度事件时,气泡和可取消选项设置为true。
在SWFA.swf中,将SWFB.swf加载到其中,然后添加到名为“ 8”的显示对象容器中。然后,将一个事件侦听器添加到容器,该侦听器从SWFB.swf侦听要调度的ѭ7事件。分派事件时,事件处理程序将调用Timer事件的11方法来停止事件的传播(如其名称所示)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。