我正在尝试组装一系列外部装载swfs的投影仪,我的一般问题将尽可能短。
如果外部swf加载到ctrl
(在创作过程中放置在舞台上的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 });
后者似乎更加强大,因此我很难让它发挥作用,但我想我已经错过了一些教训;-) 有没有人经历过这个?我的方法是正确的还是我应该走另一条路?
为每个人欢呼。
答案 0 :(得分:0)
通过在调度事件时将bubbles选项设置为true,您可以获取crtl
显示对象以接收从外部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);
}// end function
private function init(e:Event = null):void
{
removeEventListener(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在将Timer
事件添加到舞台后5秒发送。当它调度事件时,bubbles和cancelable选项设置为true。
在SWFA.swf中,将SWFB.swf加载到其中,然后将其添加到名为container
的显示对象容器中。然后将一个事件侦听器添加到容器中,该容器侦听要调度的SWFB.swf中的Timer
事件。调度时,onContainerTimerComplete()
事件处理程序调用Timer事件的stopPropagation()
方法(顾名思义)停止传播事件。