我有一个主SWF加载其他swfs。所有内容都可以正常使用主swf内的代码( sketch ):
var loader:Loader = new Loader();
stage.addChild(loader);
loader.load(new URLRequest('external.swf'));
但是,在尝试加载使用文档类的外部swf时,它对stage
对象有访问错误。更清楚的是,将在要加载的swf出版物中配置文档类:
在Main.as
内,拥有舞台访问代码的类:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
// access stage
trace(stage);
trace(stage.stageWidth);
}
}
}
当主swf尝试加载外部swf时,会发生错误:
null
TypeError: Error #1009: Cannot access a property or method of a null object reference.
如何解决这个问题?
答案 0 :(得分:1)
不要在加载的swf的构造函数中引用stage
。请改为订阅Event.ADDED_TO_STAGE
。
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
trace("1 stage="+stage); // null, if this swf is loaded
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
protected function onAddedToStage(event:Event):void
{
trace("2 stage="+stage); // object
}
}
}
更新:如果您无法修改加载的swf,则可以在加载程序swf中覆盖其主类定义。如果加载的swf的Main类包含重要和/或不断变化的逻辑,则可能产生不希望的后果。
Main
类,在你加载的swf中的同一个包中。ADDED_TO_STAGE
编写正确的操作以正确访问阶段。Main
编译到您的加载器swf中:只需在主swf的代码中添加Main;
(这也可以使用flash builder中的编译器参数来完成,但为什么要这么做) 这样就可以完全替换Main
的定义。