AS3加载外部swf文件,如何调用原swf里的方法

a.swf里面加载b.swf,如何实现点击b.swf里面的按钮,执行a.swf里面的方法

加载b.swf成功后,将a传到b中去,之后在b中可以使用这个变量来控制a上的东西

 

a.swf加载代码:

var loader:Loader = new Loader();
loader.load(new URLRequest("b.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteFun);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadErrorFun);
function loadCompleteFun(e:Event):void {
 var obj = e.currentTarget.content;
 obj.main = this;//注租圆意,在b.swf中必须有公共变量main才行,否则这里就报错了,可以自定义,只要双方都统一就行
 this.addChild(obj);
}
  
function loadErrorFun(e:IOErrorEvent):void {
 trace("b.swf不存在!");
}

function mainFun():void{

 trace("这个是a中的方法!");

}

在b.swf中要有一个公共弊物塌变量,让a来设置的

 

b.swf代码:

var main;
btn.addEventListener(MouseEvent.CLICK,clickFun);
function clickFun(e:MouseEvent):void{
 if(main){
  main.mainFun();//调用a中的蚂衡方法
  //对于a中的所有可访问的方法与变量都可以这样访问使用
 }
}

代码已测试通过。


a文件是用Loader载入b.swf的吧,可以在b中通过”Object(parent.parent).functionA“这样的形式来调用a中行告的函数。具体使用几个parent要看b相对于a的层次。

 

给你做了一个as3版本的例子,档族明源文件穗枝用flash cs6打开。

 


无语,就没人会使用事件流的方式派发事件通知a吗?

 

 

 

文件版本要求最低flash cs4 打开

使用了as3的事哗裂件流特性, 什么功能属烂芦雹于谁的 就由谁去负责,a.swf处理的工作,就不应该由b.swf去逐级访问控制,
b.swf只需要派发一个事件 ,告诉饥帆a.swf需要做什么事就可以了,具体事情如何处理,a.swf全权负责完成