FLex:在SWFLoader中卸载swf文件

时间:2011-03-10 18:30:22

标签: flex flex3 flash swfloader

在Flex 3中,我有一个SWFLoader:

<mx:SWFLoader id="player" source="http://youtube.com/v/..." />

一段时间后我调用了player.unloadAndStop()。我总是得到这个错误:

ReferenceError: Error #1056: Cannot create property __tweenLite_mc on _swftest_mx_managers_SystemManager.

这是什么意思以及如何避免这种情况?

UPD: AIR 2没有此问题

1 个答案:

答案 0 :(得分:0)

也许尝试Loader类?我不确定它是否有用,但我通过ActionScript完成所有加载。一般来说,我在ActionScript中执行“heavyWeight”编程/逻辑/ cotrol的东西,并留下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处理逻辑< / em>事情。