我建议使用 Event.INIT 而不是 Event.COMPLETE。 INIT 在加载完成后触发并且加载的 swf 中的所有类/实例都已初始化并可以使用。
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit);
addChild(loader);
function handleInit(e:Event):void{
var as2Movie:AVM1Movie = e.target.content as AVM1Movie;
}
您可以通过 Loader 类的 content 属性访问加载的内容。
并不是因为您将 as2 电影加载到 as3 电影中,所以存在一些限制:
“AVM1Movie 是一个简单的类,它表示使用 ActionScript 1.0 或 2.0 的 AVM1 影片剪辑。(AVM1 是用于运行 ActionScript 1.0 和 2.0 的 ActionScript 虚拟机。AVM2 是用于运行 ActionScript 3.0 的 ActionScript 虚拟机。)当 Flash Player 8 或更早版本的 SWF 文件由 Loader 对象加载时,会创建一个 AVM1Movie 对象。AVM1Movie 对象可以使用从 DisplayObject 类继承的方法和属性(例如 x、y、width 等) . 但是,AVM1Movie 对象和 AVM2 对象之间不允许互操作(例如调用方法或使用参数)。
AVM2 SWF 文件加载的 AVM1 SWF 文件有几个限制:
加载的 AVM1Movie 对象作为 AVM1 SWF 文件及其加载的所有 AVM1 SWF 文件的伪根对象运行(就像 ActionScript 1.0 lockroot 属性设置为 true)。 AVM1 影片始终是任何子代中任何 ActionScript 1.0 或 2.0 代码执行的顶部。加载的子项的 _root 属性始终是此 AVM1 SWF 文件,除非在加载的 AVM1 SWF 文件中设置了 lockroot 属性。
AVM1 内容无法将文件加载到关卡中。例如,它不能通过调用 loadMovieNum("url", levelNum) 来加载文件。
由 AVM2 SWF 文件加载的 AVM1 SWF 文件无法将另一个 SWF 文件加载到此文件中。也就是说,它不能在自身之上加载另一个 SWF 文件。但是,此 SWF 文件加载的子 Sprite 对象、MovieClip 对象或其他 AVM1 SWF 文件可以加载到此。"来自 as3 文档。
有关更多信息,请参阅AMV1Movie Reference。
如果你想从 as3 调用 as2 电影,你需要使用本地连接来建立 2 个 swf 之间的通信。
Grant Skinner 为这种情况写了一个名为SWF Bridge 的方便的东西(易于 as2 到 as3 通信)。值得一试。
祝你好运!