2

在 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 没有这个问题

4

1 回答 1

0

也许试试 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 处理逻辑事物会更好。

于 2011-03-15T16:02:53.617 回答