加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

父SWF与子SWF之间的传值

发布时间:2020-12-15 17:48:34 所属栏目:百科 来源:网络整理
导读:先来说一下主SWF传值给子SWF: ? ? ? ? 我们用一个例子来讲解这一块的东西 ? ? ? ? 首先,我们要了一子SWF(以下简称儿子)和一个主SWF(以下简称父亲),儿子里面,就一个文本框t,? ?用来显示父亲下达的命令。 ? ?? ???儿子的代码: package? { ? ? ? ? imp
先来说一下主SWF传值给子SWF:

? ? ? ? 我们用一个例子来讲解这一块的东西
? ? ? ? 首先,我们要了一子SWF(以下简称儿子)和一个主SWF(以下简称父亲),儿子里面,就一个文本框t,? ?用来显示父亲下达的命令。
? ?? ???儿子的代码:
  1. package?
  2. {
  3. ? ? ? ? import flash.display.MovieClip;
  4. ? ? ? ? import flash.events.Event;
  5. ? ? ? ? import flash.text.TextField;
  6. ? ? ? ? public class SunMain extends MovieClip
  7. ? ? ? ? {
  8. ? ? ? ? ? ? ? ? private var t:TextField;//显示从父SWF传过来的数据
  9. ? ? ? ? ? ? ? ? public function SunMain():void
  10. ? ? ? ? ? ? ? ? {
  11. ? ? ? ? ? ? ? ? ? ? ? ? if (stage)
  12. ? ? ? ? ? ? ? ? ? ? ? ? {
  13. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? init();
  14. ? ? ? ? ? ? ? ? ? ? ? ? }
  15. ? ? ? ? ? ? ? ? ? ? ? ? else
  16. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? addEventListener(Event.ADDED_TO_STAGE,init);
  17. ? ? ? ? ? ? ? ? }

  18. ? ? ? ? ? ? ? ? private function init(e:Event=null):void
  19. ? ? ? ? ? ? ? ? ? ? ? ? removeEventListener(Event.ADDED_TO_STAGE,serif; font-size:12px; line-height:1.8em"> ? ? ? ? ? ? ? ? ? ? ? ? t = new TextField();
  20. ? ? ? ? ? ? ? ? ? ? ? ? t.border = true;
  21. ? ? ? ? ? ? ? ? ? ? ? ? t.height = 150;
  22. ? ? ? ? ? ? ? ? ? ? ? ? t.width = 250;
  23. ? ? ? ? ? ? ? ? ? ? ? ? addChild(t);
  24. ? ? ? ? }
  25. }
复制代码
这上面的代码,应该不会有什么困难的吧!
好了,儿子的暂时就告一段落吧,我们来写父亲的,先简单说一下,父亲里面的也就两样东西,一个输入文本框和一个MC,MC用来提示传送数据了(说得简单点,就是点出后,就加载子SWF)。
看代码:
  1. ? ? ? ? import flash.events.MouseEvent;
  2. ? ? ? ? import flash.text.TextFieldType;
  3. ? ? ? ? import flash.display.Loader;
  4. ? ? ? ? import flash.net.URLRequest;
  5. ? ? ? ? public class Main extends MovieClip
  6. ? ? ? ? ? ? ? ? private var txt:TextField;//定一个文本框,显示标题
  7. ? ? ? ? ? ? ? ? private var inputtxt:TextField;//用一个输入文本框,将里面的内容发给子SWF
  8. ? ? ? ? ? ? ? ? private var mc:MovieClip;//点出mc后,将inputtxt里的内容发出去
  9. ? ? ? ? ? ? ? ? private var loader:Loader;
  10. ? ? ? ? ? ? ? ? public function Main():void
  11. ? ? ? ? ? ? ? ? ? ? ? ? txt = new TextField??;
  12. ? ? ? ? ? ? ? ? ? ? ? ? txt.text = "请输入内容:";
  13. ? ? ? ? ? ? ? ? ? ? ? ? txt.height = 20;
  14. ? ? ? ? ? ? ? ? ? ? ? ? txt.selectable = false;
  15. ? ? ? ? ? ? ? ? ? ? ? ? this.addChild(txt);
  16. ? ? ? ? ? ? ? ? ? ? ? ? inputtxt = new TextField??;
  17. ? ? ? ? ? ? ? ? ? ? ? ? inputtxt.type = TextFieldType.INPUT;
  18. ? ? ? ? ? ? ? ? ? ? ? ? inputtxt.border = true;
  19. ? ? ? ? ? ? ? ? ? ? ? ? inputtxt.x = 140;
  20. ? ? ? ? ? ? ? ? ? ? ? ? inputtxt.width = 300;
  21. ? ? ? ? ? ? ? ? ? ? ? ? this.addChild(inputtxt);
  22. ? ? ? ? ? ? ? ? ? ? ? ? mc = new MovieClip??;
  23. ? ? ? ? ? ? ? ? ? ? ? ? mc.graphics.beginFill(0xff0000);
  24. ? ? ? ? ? ? ? ? ? ? ? ? mc.graphics.drawRect(0,50,20);
  25. ? ? ? ? ? ? ? ? ? ? ? ? mc.graphics.endFill();
  26. ? ? ? ? ? ? ? ? ? ? ? ? mc.y = 110;
  27. ? ? ? ? ? ? ? ? ? ? ? ? mc.x = 200;
  28. ? ? ? ? ? ? ? ? ? ? ? ? this.addChild(mc);
  29. ? ? ? ? ? ? ? ? ? ? ? ? mc.addEventListener(MouseEvent.CLICK,clicker);
  30. //发送数据的时候,就是把子SWF加载进来;
  31. ? ? ? ? ? ? ? ? ? ? ? ??
  32. ? ? ? ? ? ? ? ??
  33. ? ? ? ? ? ? ? ? private function clicker(e:MouseEvent):void
  34. ? ? ? ? ? ? ? ? ? ? ? ? //加载子SWF前,先把舞台清空
  35. ? ? ? ? ? ? ? ? ? ? ? ? while (this.numChildren > 0)
  36. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? this.removeChildAt(0);
  37. ? ? ? ? ? ? ? ? ? ? ? ? loader= new Loader();
  38. ? ? ? ? ? ? ? ? ? ? ? ? loader.load(new URLRequest("SunSwf.swf"));
  39. ? ? ? ? ? ? ? ? ? ? ? ? loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completes);
  40. ? ? ? ? ? ? ? ? private function completes(e:Event):void
  41. ? ? ? ? ? ? ? ? ? ? ? ? var mc:MovieClip = e.currentTarget.content as MovieClip? ? ? ??
  42. ? ? ? ? ? ? ? ? ? ? ? ? addChild(loader);
  43. 这些东西,都没有什么难度的,都是很基础的东西,如果有什么不明白的,可以在群里问,也可以跟贴问!
    接下来,我们要做的就是,把数据传出去,我们要在儿子里面写一个方法,并且是一个公有的,这个方法的主要目的就是,父亲加载完成儿子后,父亲会让儿子去执行这个方法。
    1. //定义接收父SWF内容的方法
    2. public function getParentMethod(object:Object):void
    3. ? ? ? ? t.text="父亲下达的命令是:"+object.Method;
    4. 由于,儿子的完整代码就是:
      1. ? ? ? ? ? ? ? ? private var _parent:Object;
      2. ? ? ? ? ? ? ? ? //定义接收父SWF内容的方法
      3. ? ? ? ? ? ? ? ? public function getParentMethod(object:Object):void
      4. ? ? ? ? ? ? ? ? ? ? ? ? t.text="父亲下达的命令是:"+object.Method;
      5. 既然儿子的方法已经定义了,那么,就应该让父亲来下命令了,怎么下呢?很简单,就一句话,在父亲completes函数里面,加一句,mc.getParentMethod(this)即可,对了,在父亲里面,还得定义一个GET方法,用来传输输入的文本,这样的话,完整的父亲代码就是这样的:
        1. ? ? ? ? ? ? ? ? ? ? ? ? var mc:MovieClip = e.currentTarget.content as MovieClip//.content as MovieClip;
        2. ? ? ? ? ? ? ? ? ? ? ? ? mc.getParentMethod(this);
        3. ? ? ? ? ? ? ? ? //定义一个方法,让子SWF读取里面的数据
        4. ? ? ? ? ? ? ? ? public function get Method():String
        5. ? ? ? ? ? ? ? ? ? ? ? ? return inputtxt.text;
        6. ? ? ? ? }
        7. 复制代码

        大家可以去测试一下??这下儿子就能接受到父亲的命令了,下一节,我们再来说说儿子给父亲传值。


        这一节,我们来说说儿子向父亲传值
        上一节,我们讲了父亲给儿子下命令,人嘛,都是要互相交流的,父亲跟儿子下了命令,儿子至少也要回应一下,那么我们怎么来实现呢?
        我这里讲的方法很简单,就用了一个事件,儿子收到父亲的命令后,儿子要回应,在回应的时候,就派发一个事件,让父亲侦听。
        这里提一点,因为父亲加载了儿子,两个对象的stage是相同的,所以,儿子就可以用stage派发一个事件,让父亲去接受!
        首先,我们得有一个输入文本框和一个提示框(“一个道理里面写’返回给父SWF的值:’”),代码:

        1. desSuntt=new TextField;
        2. ? ? ? ? ? ? ? ? ? ? ? ? desSuntt.x=10;
        3. ? ? ? ? ? ? ? ? ? ? ? ? desSuntt.y=270;
        4. ? ? ? ? ? ? ? ? ? ? ? ? desSuntt.width=150;
        5. ? ? ? ? ? ? ? ? ? ? ? ? desSuntt.text="返回给父SWF的值:";
        6. ? ? ? ? ? ? ? ? ? ? ? ? addChild(desSuntt);
        7. ? ? ? ? ? ? ? ? ? ? ? ? suninputtxt = new TextField??;
        8. ? ? ? ? ? ? ? ? ? ? ? ? suninputtxt.type = TextFieldType.INPUT;
        9. ? ? ? ? ? ? ? ? ? ? ? ? suninputtxt.border = true;
        10. ? ? ? ? ? ? ? ? ? ? ? ? suninputtxt.x = 130;
        11. ? ? ? ? ? ? ? ? ? ? ? ? suninputtxt.y=270;
        12. ? ? ? ? ? ? ? ? ? ? ? ? suninputtxt.width = 300;
        13. ? ? ? ? ? ? ? ? ? ? ? ? addChild(suninputtxt);
        当然,还要一个按钮:
        1. mc=new MovieClip;
        2. ? ? ? ? ? ? ? ? ? ? ? ? mc.graphics.beginFill(0xffcccc);
        3. ? ? ? ? ? ? ? ? ? ? ? ? mc.x=300;
        4. ? ? ? ? ? ? ? ? ? ? ? ? mc.y=400;
        5. ? ? ? ? ? ? ? ? ? ? ? ? addChild(mc);
        6. 给按钮加一个侦听,让其返回到父SWF里面,接下来,我们要在点击按钮的时候,派发一个事件:
          1. private function rebackMain(e:MouseEvent):void
          2. ? ? ? ? ? ? ? ? ? ? ? ? stage.dispatchEvent(new Event("BACKPARENT",true));
          3. ? ? ? ? ? ? ? ? }
          主类就可以去侦听这个“BACKPARENT”的事件。
          最后,我们还得写一个GET方面,让父亲访问,接收到儿子的消息:
          1. ublic function get SunMessage():String
          2. ? ? ? ? ? ? ? ? ? ? ? ? return suninputtxt.text;
          3. 好了,完整的儿子就是这样的:
            1. ? ? ? ? ? ? ? ? public static const BACKPARENT:String="BACKPARENT";
            2. ? ? ? ? ? ? ? ? private var suninputtxt:TextField;
            3. ? ? ? ? ? ? ? ? private var desSuntt:TextField;
            4. ? ? ? ? ? ? ? ? private var mc:MovieClip;
            5. ? ? ? ? ? ? ? ? ? ? ? ? desSuntt=new TextField;
            6. ? ? ? ? ? ? ? ? ? ? ? ? addChild(suninputtxt);
            7. ? ? ? ? ? ? ? ? ? ? ? ? mc=new MovieClip;
            8. ? ? ? ? ? ? ? ? //返回给父亲
            9. ? ? ? ? ? ? ? ? private function rebackMain(e:MouseEvent):void
            10. ? ? ? ? ? ? ? ? public function get SunMessage():String
            11. 该来完善一下父亲的代码了,父亲接收到代码后,要把消息显示出来,得有一个显示的文本框和一个提示框(不多说了):
              1. tts=new TextField;
              2. ? ? ? ? ? ? ? ? ? ? ? ? tts.text="子SWF传过来的数据:";
              3. ? ? ? ? ? ? ? ? ? ? ? ? tts.width=120;
              4. ? ? ? ? ? ? ? ? ? ? ? ? tts.y=230;
              5. ? ? ? ? ? ? ? ? ? ? ? ? tts.selectable=false;
              6. ? ? ? ? ? ? ? ? ? ? ? ? this.addChild(tts);
              7. ? ? ? ? ? ? ? ? ? ? ? ? tt=new TextField;
              8. ? ? ? ? ? ? ? ? ? ? ? ? tt.height=150;
              9. ? ? ? ? ? ? ? ? ? ? ? ? tt.width=250;
              10. ? ? ? ? ? ? ? ? ? ? ? ? tt.x=140;
              11. ? ? ? ? ? ? ? ? ? ? ? ? tt.y=230;
              12. ? ? ? ? ? ? ? ? ? ? ? ? tt.border=true;
              13. ? ? ? ? ? ? ? ? ? ? ? ? this.addChild(tt)
              然后就是给父亲加一个侦听:
              1. stage.addEventListener("BACKPARENT",backHandler);
              在侦听函数里面,我们得把儿子返回来的消息显示出来,在显示前,先得把儿子unload掉,然后再把自己的东西加载上来:
              1. private function backHandler(e:Event):void
              2. ? ? ? ? ? ? ? ? ? ? ? ? addChild(txt);
              3. ? ? ? ? ? ? ? ? ? ? ? ? addChild(inputtxt);
              4. ? ? ? ? ? ? ? ? ? ? ? ? addChild(tt);
              5. ? ? ? ? ? ? ? ? ? ? ? ? addChild(tts)
              6. ? ? ? ? ? ? ? ? ? ? ? ? loader.unload();
              7. ? ? ? ? ? ? ? ? ? ? ? ? tt.text=mcS.SunMessage;
              8. 复制代码
              这里要提一点的是,前一节,我在加载儿子的时候写了一个乱有的mc,因为当时没有考虑到后面这一节,所以,在下面显示儿子返回消息的时候,mc是不可访问的,所以,我把那个mc设成了全局变量mcS ,这样下来,父亲的代码就是:
              1. ? ? ? ? ? ? ? ? private var tt:TextField;//主SWF接收到子SWF传过来的数据
              2. ? ? ? ? ? ? ? ? private var tts:TextField;//提示框,主要是放“子SWF传过来的数据”;
              3. ? ? ? ? ? ? ? ? private var mcS:MovieClip;
              4. ? ? ? ? ? ? ? ? ? ? ? ? tts=new TextField;
              5. ? ? ? ? ? ? ? ? ? ? ? ? this.addChild(tt);
              6. ? ? ? ? ? ? ? ? ? ? ? ? stage.addEventListener("BACKPARENT",backHandler);
              7. ? ? ? ? ? ? ? ? ? ? ? ? mcS = e.currentTarget.content as MovieClip//.content as MovieClip;
              8. ? ? ? ? ? ? ? ? ? ? ? ? mcS.getParentMethod(this);
              9. ? ? ? ? ? ? ? ? private function backHandler(e:Event):void
              10. ? ? ? ? ? ? ? ? {
              11. 好了,整个的代码就这样了,大家可以看一下,欢迎指正!如果你有其它方法,回帖告诉我,大家都会感谢你的!
                我把自己写的东西也贴上来?

                ? 主SWF与子SWF互相通信的问题.rar

              (编辑:李大同)

              【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读