代码之家  ›  专栏  ›  技术社区  ›  redconservatory

访问加载的.swf文件中的函数?

  •  4
  • redconservatory  · 技术社区  · 15 年前

    是否有方法调用加载的SWF文件中的函数?

    基本上,我有一个.swf文件(a)加载另一个.swf文件(b)…我只想把b当作是添加到我的类中的任何其他实例来处理。


    必须用.swf文件类的名称重铸“loader”:

    已加载.swf类:

    package src {
    import flash.display.MovieClip;
    
    public class LoadedSWF extends MovieClip     {
        public function LoadedSWF() {
        }
    
        public function helloWorld():void
        {
            trace("hello world from loaded swf!");
        }
    }
    }
    

    主要类别:

    package src {
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.display.MovieClip;
    import flash.events.Event;
    
    public class Main extends MovieClip {
    
        private var loader:Loader;
    
        public function Main() {
            loadSWF("LoadedSWF.swf")
        }
    
        private function loadSWF(url:String):void {
            var urlRequest:URLRequest = new URLRequest(url);
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded, false, 0, true);
            loader.load(urlRequest);
            addChild(loader);
    
        }
    
        private function onLoaded(e:Event):void {
            var target:LoadedSWF = e.currentTarget.loader.content as LoadedSWF;
            trace(target);
            target.helloWorld();
    
            addChild(target);
        }
    }
    

    }

    2 回复  |  直到 13 年前
        1
  •  4
  •   user434565    15 年前

    在AdobeFlex中,可以使用flash.display.loader类加载另一个SWF,并向其添加事件侦听器。

    此示例摘自Adobe文档:

    var url:String = "http://www.helpexamples.com/flash/images/image2.jpg";
    var urlRequest:URLRequest = new URLRequest(url);
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete);
    loader.load(urlRequest);
    addChild(loader);
    
    function loader_complete(evt:Event):void {
        var target_mc:Loader = evt.currentTarget.loader as Loader;
        target_mc.x = (stage.stageWidth - target_mc.width) / 2;
        target_mc.y = (stage.stageHeight - target_mc.height) / 2;
    }
    

    因为ContentLoaderInfo是EventDispatcher的子类,所以您也可以将事件分派到已加载的SWF。 这基本上就像从SWF调用一个函数,只是稍微复杂一点。

        2
  •  7
  •   LPL user462990    14 年前

    有两种情况,即

    1. 子SWF(B)调用父SWF(A)或的函数
    2. 父SWF(A)调用已加载SWF(B)的函数

    首先,在这两种情况下,必须确保已加载的SWF(b)已使用 Event.COMPLETE . 这样就可以实现两个SWF之间的通信。加载的SWF和其他任何子级一样。

    这是案例2的样本代码

    var mLoader:Loader = new Loader();
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.load(new URLRequest("B.swf"));
    
    public function onCompleteHandler(evt:Event)
    {
        var embedSWF:MovieClip = MovieClip(evt.target.content);
        addChild(embedSWF);
        embedSWF.function_OF_B();
    }
    

    embedSWF.function_OF_B() 语句将调用子SWF B的函数,即 function_OF_B()