也许试试 Loader 类?我不确定它是否会有所帮助,但我通过 ActionScript 完成所有加载。一般来说,我在 ActionScript 中做“重量级”的编程/逻辑/控制工作,而将 Flex 留给更简单的布局代码。也就是说,flex 把事情放在适当的位置,而 actionscript 控制它。在我们的 Flex 3 项目中加载剪辑时,我有如下控制代码:
import flash.display.Loader;
private var loader:Loader;
public function init() {
loader = new Loader();
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadFailed);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleted);
}
调用以下内容:
//here, pop returns a string like "/path/to/movie.swf"
loader.load(new URLRequest(clipsToPlay.pop()));
...
loader.unload();
包含在以下功能中:
private function loadNextClip():void {
if(clipsToPlay.length == 0) {
dispatchEvent(new PlayBackCompleteEvent(PlaybackCompleteEvent.ALL));
return;
}
loader.load(new URLRequest(clipsToPlay.pop()));
}
private function loadCompleted(event:Event):void {
currentClip = event.target.content as MovieClip;
loader.unload();
displayClip();
}
private function displayClip():void {
applyEffects();
currentClip.addEventListener(Event.ENTER_FRAME, monitorForCompletion);
addChild(currentClip);
}
我不确定是否可以使用 Loader 代替 SWFLoader,但如果可以,我希望在某种程度上对您或其他人有所帮助......
编辑:
我刚刚查了一下,mx.controls.SWFLoader 和 flash.display.Loader 具有非常相似的功能。如上所述,我会尝试使用 Loader,看看它是否能解决问题。您也可以通过 MXML 初始化加载程序,但我不推荐它,因为它不是可视组件,我认为让 MXML 处理可视事物而 ActionScript 处理逻辑事物会更好。