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

时间:2010-09-22 03:36:23

标签: actionscript-3 loader

有没有办法在加载的SWF文件中调用函数?

基本上,我有一个.swf文件(A)加载另一个.swf文件(B)...我只想将B视为添加到我的类中的任何其他实例.swf“A”。 ..


必须使用.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 个答案:

答案 0 :(得分:7)

有两种情况,即

  1. 子swf(B)调用Parent swf(A)或
  2. 的功能
  3. 父swf(A)调用加载的swf(B)函数
  4. 首先,在这两种情况下,您必须确保已加载的swf(B)已加载并使用Event.COMPLETE添加到Loader swf(A)。然后两个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()

答案 1 :(得分:4)

在Adobe Flex中,您可以使用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调用一个函数,只是稍微复杂一点。