是否有一个事件会在外部加载的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中添加舞台事件监听器,只有在它的阶段初始化之后?
答案 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);
}
但要小心。每次您回到舞台时(例如从桌面到您的应用程序),都会调度此事件。如果您只想要一次,请将其删除。