何时在外部加载的SWF中设置阶段事件侦听器?

时间:2014-02-16 12:55:08

标签: actionscript-3 flash

是否有一个事件会在外部加载的SWF中被触发,一旦该SWF被加载到另一个父SWF并且已经初始化了它的阶段?

我正在加载一个添加了阶段事件监听器的外部SWF:

stage.addEventListener(MouseEvent.MOUSE_DOWN, stageClick); stage.addEventListener(MouseEvent.MOUSE_UP, stageRelease);

问题是,如果我将此SWF加载到另一个SWF中,那么:

var contentLoader:Loader = new Loader(); contentLoader.load(new URLRequest("DrawingBoard/DrawingBoard.swf"));

我收到此错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference. at DrawingBoard_fla::MainTimeline/frame1()

如果我在嵌套的SWF中注释掉舞台事件监听器,我就会停止这样做。我认为这是因为加载的SWF没有立即添加到时间线。那么,我是否可以在外部SWF中添加舞台事件监听器,只有在它的阶段初始化之后?

1 个答案:

答案 0 :(得分:0)

在外部加载的SWF主类的构造函数中添加Event.ADDED_TO_STAGE,如下所示:

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

 function onAddedToStage(e:Event):void
 {
     //You can access stage object here
     stage.addEventListener(MouseEvent.MOUSE_DOWN, stageClick);
     stage.addEventListener(MouseEvent.MOUSE_UP, stageRelease);
 }

更新:

对于时间轴代码,您可以使用Event.ACTIVATE。像这样,

addEventListener(Event.ACTIVATE, onActivate);

function onActivate(e:Event):void
{

    //remove this listener if you want to dispatch it only once
    removeEventListener(Event.ACTIVATE, onActivate);
}

但要小心。每次您回到舞台时(例如从桌面到您的应用程序),都会调度此事件。如果您只想要一次,请将其删除。