1

目前我正在开发一个大量使用外部 SWF 的应用程序 (Flex)。我想创建一个静态方法,它将文件名作为参数并返回包装在其他类中的 SWF。

public static function getSWFWrapperFromFile(path:string):SWFWrapper {
   var loader:SWFLoader = new SWFLoader();
   loader.addListener(Event.COMPLETE, onLoad);
   loader.load(path);
   // If I create new SWFWrapper object here and try to assign it the loader.content  I get null reference

  }

但是,使用这种方法,由于非阻塞 load() 和 onLoad 处理程序的需要,我无法将逻辑封装在一个函数中。调用加载方法后是否有可能强制延迟?或者也许还有另一种更好的方法?

谢谢你,阿朗佐

4

4 回答 4

1

显示列表是为异步加载精心设计的。您会注意到 Loader 是一个 DisplayObject 派生类,因此可以直接放在显示列表中。当它的内容被加载时,它将成为 Loader 的子节点。因此,如果 SWFWrapper 是 DisplayObject 派生的,您只需在代码末尾执行以下操作:


var wrapper:SWFWrapper = new SWFWrapper();
wrapper.addChild(loader);
return wrapper;
于 2009-04-10T15:54:44.720 回答
0

就像其他人说的,你不能那样做。但是,看看BulkLoader AS3 库,它可以减轻您同时管理多个加载器并等待它们完成的负担。它有据可查,并且只需要几行即可使用。

于 2009-03-18T19:02:09.680 回答
0

您需要等到您的Loader对象完成。尝试添加事件处理程序。是的,当你有多个装载机并且必须等到最后一个装载机完成后,整个事情变得模糊不清。但是,如果您要使用 SWFLoader,情况就是这样。

于 2009-03-18T16:55:19.593 回答
0

在 Flash 中,你不能阻塞一个方法——你总是必须使用 onLoad 处理程序来加载数据。(as3 执行模型是单线程的,如果你阻塞在一个方法中,程序的其余部分将不会被执行)

于 2009-03-18T16:56:12.760 回答