2010-09-22 94 views
4

有没有办法在加载的SWF文件中调用函数? (A)加载另一个.swf文件(B)...我只想把B看作是将任何其他实例添加到我的类中的.swf“A” ...访问加载的.swf文件中的函数?


有重铸 “装载机” .swf文件中的类的名称:

加载.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); 
    } 
} 

}

回答

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此事件的一个子类,还可以调度事件被加载的SWF。 这基本上就像从SWF调用一个函数,只是稍微复杂一点。

+1

只是为了清楚起见,这不是一个Flex具体的解决方案的建议的示例代码。事实上,这里没有一个代码是特定于Flex的,并且是直接的ActionScript 3,它将在没有导入Flex库的情况下进行编译。 – Aaron 2010-09-22 03:54:47

+0

这有助于很多,谢谢。我拿着target_mc的例子,并用我的.swf类名称重写它,它工作! – redconservatory 2010-09-22 12:28:18

+0

以上经修改的版本... – redconservatory 2010-09-22 12:29:33

7

有两种情况,即

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

首先,在这两种情况下,您必须确保使用Event.COMPLETE加载的swf(B)已加载并加载到加载程序swf(A)。然后两个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乙即功能function_OF_B()