加载外部SWF时出现意外的__Preloader__

时间:2011-11-28 20:29:35

标签: actionscript-3 preloader

我有两个文件:Main.swf和DataEnter.swf。每个都有一个文档类。我尝试在Main.swf中加载DataEnter.swf。

Main.as

package
{
    import flash.events.*;
    import flash.display.MovieClip;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.display.Loader;

    public class Main extends MovieClip
    {    
        public function Main()
        {
            var loader: Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, DataEnter_loadComplete);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
            loader.load(new URLRequest('DataEnter.swf'));
        }       

        function DataEnter_loadComplete(evt: Event):void
        {   
            trace(evt.target.content); // DataEnter__Preloader__                    
        var SWF = evt.target.content;   
        SWF.FooBar(); //Error #1069: Property FooBar not found on DataEnter__Preloader__ and there is no default value                      
        }
    }
}

DataEnter.as

package
{
    import flash.display.Sprite;

    public class DataEnter extends Sprite
    {
       private var _socketWorker:Foo;

       public function setSocketWorker(sw:Foo)
       {
           _socketWorker = sw;
       }

       public function FooBar()
       {
           //do something
       }
    }
}

当在Main类中发生Loader的事件 Event.COMPLETE 时, evt.target.content 包含对象 DataEnter_ Preloader _ 即可。 但它必须是“ DataEnter ”。

有什么问题?如何调用Loaded Class的方法FooBar?

3 个答案:

答案 0 :(得分:1)

您是否有可能使用扩展ActionScript设置面板的“运行时共享库​​”部分中的预加载器选项?

答案 1 :(得分:1)

我也遇到了这个问题。回溯后,结果是在数据swf中添加嵌入字体导致了它。

我建议从DataEnter.FLA中删除任何嵌入字体,然后重新发布SWF,以使其正常工作

答案 2 :(得分:1)

我在 FlashDevelopIDE 中打开了DataEnter.swf。这表明我的文件有两个框架,但 FlashIDE 它只有一个框架。

在DataEnter的DocumentClass中,我添加了一个类“Foo”,它与套接字一起使用。但是,这个类的对象,在构造函数中传递。

当我删除“Foo”类并再次发布文件时,在加载swf文件时* DataEnter_Preloader_ *消失了,预期的 DataEnter 就在那里。

抱歉英语不好