先来说一下主SWF传值给子SWF:
我们用一个例子来讲解这一块的东西
首先,我们要了一子SWF(以下简称儿子)和一个主SWF(以下简称父亲),儿子里面,就一个文本框t, 用来显示父亲下达的命令。
儿子的代码:
复制代码
这上面的代码,应该不会有什么困难的吧!
好了,儿子的暂时就告一段落吧,我们来写父亲的,先简单说一下,父亲里面的也就两样东西,一个输入文本框和一个MC,MC用来提示传送数据了(说得简单点,就是点出后,就加载子SWF)。
看代码:
复制代码
这些东西,都没有什么难度的,都是很基础的东西,如果有什么不明白的,可以在群里问,也可以跟贴问!
接下来,我们要做的就是,把数据传出去,我们要在儿子里面写一个方法,并且是一个公有的,这个方法的主要目的就是,父亲加载完成儿子后,父亲会让儿子去执行这个方法。
复制代码
由于,儿子的完整代码就是:
复制代码
既然儿子的方法已经定义了,那么,就应该让父亲来下命令了,怎么下呢?很简单,就一句话,在父亲completes函数里面,加一句,mc.getParentMethod(this)即可,对了,在父亲里面,还得定义一个GET方法,用来传输输入的文本,这样的话,完整的父亲代码就是这样的:
复制代码
复制代码
当然,还要一个按钮:
复制代码
给按钮加一个侦听,让其返回到父SWF里面,接下来,我们要在点击按钮的时候,派发一个事件:
复制代码
主类就可以去侦听这个“BACKPARENT”的事件。
最后,我们还得写一个GET方面,让父亲访问,接收到儿子的消息:
复制代码
好了,完整的儿子就是这样的:
复制代码
该来完善一下父亲的代码了,父亲接收到代码后,要把消息显示出来,得有一个显示的文本框和一个提示框(不多说了):
复制代码
然后就是给父亲加一个侦听:
复制代码
在侦听函数里面,我们得把儿子返回来的消息显示出来,在显示前,先得把儿子unload掉,然后再把自己的东西加载上来:
复制代码
这里要提一点的是,前一节,我在加载儿子的时候写了一个乱有的mc,因为当时没有考虑到后面这一节,所以,在下面显示儿子返回消息的时候,mc是不可访问的,所以,我把那个mc设成了全局变量mcS
,这样下来,父亲的代码就是:
复制代码
好了,整个的代码就这样了,大家可以看一下,欢迎指正!如果你有其它方法,回帖告诉我,大家都会感谢你的!
我把自己写的东西也贴上来 主SWF与子SWF互相通信的问题.rar
我们用一个例子来讲解这一块的东西
首先,我们要了一子SWF(以下简称儿子)和一个主SWF(以下简称父亲),儿子里面,就一个文本框t, 用来显示父亲下达的命令。
儿子的代码:
- package
- {
- import flash.display.MovieClip;
- import flash.events.Event;
- import flash.text.TextField;
- public class SunMain extends MovieClip
- {
- private var t:TextField;//显示从父SWF传过来的数据
- public function SunMain():void
- {
- if (stage)
- {
- init();
- }
- else
- {
- addEventListener(Event.ADDED_TO_STAGE,init);
- }
- }
-
- private function init(e:Event=null):void
- {
- removeEventListener(Event.ADDED_TO_STAGE,init);
-
- t = new TextField();
- t.border = true;
- t.height = 150;
- t.width = 250;
- addChild(t);
- }
-
- }
-
- }
好了,儿子的暂时就告一段落吧,我们来写父亲的,先简单说一下,父亲里面的也就两样东西,一个输入文本框和一个MC,MC用来提示传送数据了(说得简单点,就是点出后,就加载子SWF)。
看代码:
- package
- {
- import flash.display.MovieClip;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.text.TextField;
- import flash.text.TextFieldType;
- import flash.display.Loader;
- import flash.net.URLRequest;
- public class Main extends MovieClip
- {
- private var txt:TextField;//定一个文本框,显示标题
- private var inputtxt:TextField;//用一个输入文本框,将里面的内容发给子SWF
- private var mc:MovieClip;//点出mc后,将inputtxt里的内容发出去
- private var loader:Loader;
-
- public function Main():void
- {
- if (stage)
- {
- init();
- }
- else
- {
- addEventListener(Event.ADDED_TO_STAGE,init);
- }
- }
- private function init(e:Event=null):void
- {
- removeEventListener(Event.ADDED_TO_STAGE,init);
-
- txt = new TextField ;
- txt.text = "请输入内容:";
- txt.height = 20;
- txt.selectable = false;
- this.addChild(txt);
-
- inputtxt = new TextField ;
- inputtxt.type = TextFieldType.INPUT;
- inputtxt.border = true;
- inputtxt.x = 140;
- inputtxt.width = 300;
- this.addChild(inputtxt);
-
- mc = new MovieClip ;
- mc.graphics.beginFill(0xff0000);
- mc.graphics.drawRect(0,0,50,20);
- mc.graphics.endFill();
- mc.y = 110;
- mc.x = 200;
- this.addChild(mc);
-
-
- mc.addEventListener(MouseEvent.CLICK,clicker);
- //发送数据的时候,就是把子SWF加载进来;
-
- }
-
-
-
- private function clicker(e:MouseEvent):void
- {
- //加载子SWF前,先把舞台清空
- while (this.numChildren > 0)
- {
- this.removeChildAt(0);
- }
-
- loader= new Loader();
- loader.load(new URLRequest("SunSwf.swf"));
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completes);
- }
-
- private function completes(e:Event):void
- {
- var mc:MovieClip = e.currentTarget.content as MovieClip
- addChild(loader);
- }
- }
- }
接下来,我们要做的就是,把数据传出去,我们要在儿子里面写一个方法,并且是一个公有的,这个方法的主要目的就是,父亲加载完成儿子后,父亲会让儿子去执行这个方法。
- //定义接收父SWF内容的方法
- public function getParentMethod(object:Object):void
- {
- t.text="父亲下达的命令是:"+object.Method;
- }
- package
- {
- import flash.display.MovieClip;
- import flash.events.Event;
- import flash.text.TextField;
- public class SunMain extends MovieClip
- {
- private var _parent:Object;
- private var t:TextField;//显示从父SWF传过来的数据
- public function SunMain():void
- {
- if (stage)
- {
- init();
- }
- else
- {
- addEventListener(Event.ADDED_TO_STAGE,init);
- }
- }
-
- private function init(e:Event=null):void
- {
- removeEventListener(Event.ADDED_TO_STAGE,init);
-
- t = new TextField();
- t.border = true;
- t.height = 150;
- t.width = 250;
- addChild(t);
- }
-
- //定义接收父SWF内容的方法
- public function getParentMethod(object:Object):void
- {
- t.text="父亲下达的命令是:"+object.Method;
- }
- }
-
- }
- package
- {
- import flash.display.MovieClip;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.text.TextField;
- import flash.text.TextFieldType;
- import flash.display.Loader;
- import flash.net.URLRequest;
- public class Main extends MovieClip
- {
- private var txt:TextField;//定一个文本框,显示标题
- private var inputtxt:TextField;//用一个输入文本框,将里面的内容发给子SWF
- private var mc:MovieClip;//点出mc后,将inputtxt里的内容发出去
-
- private var loader:Loader;
- public function Main():void
- {
- if (stage)
- {
- init();
- }
- else
- {
- addEventListener(Event.ADDED_TO_STAGE,init);
- }
- }
- private function init(e:Event=null):void
- {
- removeEventListener(Event.ADDED_TO_STAGE,init);
-
- txt = new TextField ;
- txt.text = "请输入内容:";
- txt.height = 20;
- txt.selectable = false;
- this.addChild(txt);
-
- inputtxt = new TextField ;
- inputtxt.type = TextFieldType.INPUT;
- inputtxt.border = true;
- inputtxt.x = 140;
- inputtxt.width = 300;
- this.addChild(inputtxt);
-
- mc = new MovieClip ;
- mc.graphics.beginFill(0xff0000);
- mc.graphics.drawRect(0,0,50,20);
- mc.graphics.endFill();
- mc.y = 110;
- mc.x = 200;
- this.addChild(mc);
-
-
- mc.addEventListener(MouseEvent.CLICK,clicker);//发送数据的时候,就是把子SWF加载进来;
-
- }
-
-
-
- private function clicker(e:MouseEvent):void
- {
- //加载子SWF前,先把舞台清空
- while (this.numChildren > 0)
- {
- this.removeChildAt(0);
- }
-
- loader= new Loader();
- loader.load(new URLRequest("SunSwf.swf"));
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completes);
- }
-
- private function completes(e:Event):void
- {
- var mc:MovieClip = e.currentTarget.content as MovieClip//.content as MovieClip;
- addChild(loader);
- mc.getParentMethod(this);
- }
-
- //定义一个方法,让子SWF读取里面的数据
- public function get Method():String
- {
- return inputtxt.text;
- }
- }
- }
大家可以去测试一下 这下儿子就能接受到父亲的命令了,下一节,我们再来说说儿子给父亲传值。
这一节,我们来说说儿子向父亲传值
上一节,我们讲了父亲给儿子下命令,人嘛,都是要互相交流的,父亲跟儿子下了命令,儿子至少也要回应一下,那么我们怎么来实现呢?
我这里讲的方法很简单,就用了一个事件,儿子收到父亲的命令后,儿子要回应,在回应的时候,就派发一个事件,让父亲侦听。
这里提一点,因为父亲加载了儿子,两个对象的stage是相同的,所以,儿子就可以用stage派发一个事件,让父亲去接受!
首先,我们得有一个输入文本框和一个提示框(“一个道理里面写’返回给父SWF的值:’”),代码:
- desSuntt=new TextField;
- desSuntt.x=10;
- desSuntt.y=270;
- desSuntt.width=150;
- desSuntt.text="返回给父SWF的值:";
- addChild(desSuntt);
-
- suninputtxt = new TextField ;
- suninputtxt.type = TextFieldType.INPUT;
- suninputtxt.border = true;
- suninputtxt.x = 130;
- suninputtxt.y=270;
- suninputtxt.width = 300;
- addChild(suninputtxt);
- mc=new MovieClip;
- mc.graphics.beginFill(0xffcccc);
- mc.graphics.drawRect(0,0,50,20);
- mc.graphics.endFill();
- mc.x=300;
- mc.y=400;
- addChild(mc);
-
- mc.addEventListener(MouseEvent.CLICK,rebackMain);
- private function rebackMain(e:MouseEvent):void
- {
- stage.dispatchEvent(new Event("BACKPARENT",true));
- }
最后,我们还得写一个GET方面,让父亲访问,接收到儿子的消息:
- ublic function get SunMessage():String
- {
- return suninputtxt.text;
- }
- package
- {
- import flash.display.MovieClip;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.text.TextField;
- import flash.text.TextFieldType;
- public class SunMain extends MovieClip
- {
- public static const BACKPARENT:String="BACKPARENT";
-
- private var _parent:Object;
- private var t:TextField;//显示从父SWF传过来的数据
- private var suninputtxt:TextField;
- private var desSuntt:TextField;
- private var mc:MovieClip;
-
- public function SunMain():void
- {
- if (stage)
- {
- init();
- }
- else
- {
- addEventListener(Event.ADDED_TO_STAGE,init);
- }
- }
-
- private function init(e:Event=null):void
- {
- removeEventListener(Event.ADDED_TO_STAGE,init);
-
- t = new TextField();
- t.border = true;
- t.height = 150;
- t.width = 250;
- addChild(t);
-
- desSuntt=new TextField;
- desSuntt.x=10;
- desSuntt.y=270;
- desSuntt.width=150;
- desSuntt.text="返回给父SWF的值:";
- addChild(desSuntt);
-
- suninputtxt = new TextField ;
- suninputtxt.type = TextFieldType.INPUT;
- suninputtxt.border = true;
- suninputtxt.x = 130;
- suninputtxt.y=270;
- suninputtxt.width = 300;
- addChild(suninputtxt);
-
- mc=new MovieClip;
- mc.graphics.beginFill(0xffcccc);
- mc.graphics.drawRect(0,0,50,20);
- mc.graphics.endFill();
- mc.x=300;
- mc.y=400;
- addChild(mc);
-
- mc.addEventListener(MouseEvent.CLICK,rebackMain);
-
- }
-
- //返回给父亲
- private function rebackMain(e:MouseEvent):void
- {
- stage.dispatchEvent(new Event("BACKPARENT",true));
- }
-
- //定义接收父SWF内容的方法
- public function getParentMethod(object:Object):void
- {
- t.text="父亲下达的命令是:"+object.Method;
- }
-
- public function get SunMessage():String
- {
- return suninputtxt.text;
- }
- }
-
- }
- tts=new TextField;
- tts.text="子SWF传过来的数据:";
- tts.width=120;
- tts.y=230;
- tts.selectable=false;
- this.addChild(tts);
-
- tt=new TextField;
- tt.height=150;
- tt.width=250;
- tt.x=140;
- tt.y=230;
- tt.border=true;
- this.addChild(tt)
- stage.addEventListener("BACKPARENT",backHandler);
- private function backHandler(e:Event):void
- {
- addChild(txt);
- addChild(inputtxt);
- addChild(tt);
- addChild(tts)
- addChild(mc);
- loader.unload();
- tt.text=mcS.SunMessage;
- }
- package
- {
- import flash.display.MovieClip;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.text.TextField;
- import flash.text.TextFieldType;
- import flash.display.Loader;
- import flash.net.URLRequest;
- public class Main extends MovieClip
- {
- private var txt:TextField;//定一个文本框,显示标题
- private var inputtxt:TextField;//用一个输入文本框,将里面的内容发给子SWF
- private var mc:MovieClip;//点出mc后,将inputtxt里的内容发出去
-
- private var loader:Loader;
- private var tt:TextField;//主SWF接收到子SWF传过来的数据
- private var tts:TextField;//提示框,主要是放“子SWF传过来的数据”;
- private var mcS:MovieClip;
-
- public function Main():void
- {
- if (stage)
- {
- init();
- }
- else
- {
- addEventListener(Event.ADDED_TO_STAGE,init);
- }
- }
- private function init(e:Event=null):void
- {
- removeEventListener(Event.ADDED_TO_STAGE,init);
-
- txt = new TextField ;
- txt.text = "请输入内容:";
- txt.height = 20;
- txt.selectable = false;
- this.addChild(txt);
-
- inputtxt = new TextField ;
- inputtxt.type = TextFieldType.INPUT;
- inputtxt.border = true;
- inputtxt.x = 140;
- inputtxt.width = 300;
- this.addChild(inputtxt);
-
- tts=new TextField;
- tts.text="子SWF传过来的数据:";
- tts.width=120;
- tts.y=230;
- tts.selectable=false;
- this.addChild(tts);
-
- tt=new TextField;
- tt.height=150;
- tt.width=250;
- tt.x=140;
- tt.y=230;
- tt.border=true;
- this.addChild(tt);
-
- mc = new MovieClip ;
- mc.graphics.beginFill(0xff0000);
- mc.graphics.drawRect(0,0,50,20);
- mc.graphics.endFill();
- mc.y = 110;
- mc.x = 200;
- this.addChild(mc);
-
-
- mc.addEventListener(MouseEvent.CLICK,clicker);//发送数据的时候,就是把子SWF加载进来;
-
- stage.addEventListener("BACKPARENT",backHandler);
-
- }
-
-
-
- private function clicker(e:MouseEvent):void
- {
- //加载子SWF前,先把舞台清空
- while (this.numChildren > 0)
- {
- this.removeChildAt(0);
- }
-
- loader= new Loader();
- loader.load(new URLRequest("SunSwf.swf"));
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completes);
- }
-
- private function completes(e:Event):void
- {
- mcS = e.currentTarget.content as MovieClip//.content as MovieClip;
- addChild(loader);
- mcS.getParentMethod(this);
- }
-
- //定义一个方法,让子SWF读取里面的数据
- public function get Method():String
- {
- return inputtxt.text;
- }
-
- private function backHandler(e:Event):void
- {
- addChild(txt);
- addChild(inputtxt);
- addChild(tt);
- addChild(tts)
- addChild(mc);
- loader.unload();
- tt.text=mcS.SunMessage;
- }
- }
- }
我把自己写的东西也贴上来 主SWF与子SWF互相通信的问题.rar