主swf与被加载swf的通信问题
2011-06-29 21:23
218 查看
做flash应用,经常要用到swf与swf之间的通信,而加载与被加载swf之间的通信最为常见。而习惯了as2开发的同学,转到as3开发时,会觉得有点不适应,下面就讲下as3和as2实现加载与被加载swf通信的不同之处。 (一)先讲as2. 在as2中,无论你用loadMovie还是loadClip加载进来一个swf,只要知道他们的层级关系,都可以用this、_parent等轻松相互控制。下面以main.swf和sub.swf为例: main.swf主时间轴第一帧代码: var my_mcl:MovieClipLoader = new MovieClipLoader(); var mclListener:Object = new Object(); //加载完毕 mclListener.onLoadInit = function(target_mc:MovieClip):Void { main_btn.onRelease = function(){ sub_mc.mainCallSub();//点击main.swf主场景名为main_btn的按钮,调用sub.swf主场景名为mainCallSub的函数 } } my_mcl.addListener(mclListener); sub_mc._lockroot = true;//锁定被加载swf的主时间轴,让_root统一指向main.swf的主时间轴 my_mcl.loadClip("sub.swf", sub_mc);//把sub.swf加载到main.swf主场景名为sub_mc的剪辑中。 //被sub.swf访问的函数 function subCallMain(){ trace("subCallMain !"); } sub.swf主时间轴第一帧代码: sub_btn.onRelease = function(){ this._parent._parent.subCallMain();//点击sub.swf主场景名为sub_btn的按钮,调用main.swf主场景名为subCallMain 的函数 //当然,也可以直接一点,用_root.subCallMain();但前提是main.swf上加上sub_mc._lockroot = true;不然访问的是自己的时间轴 } //被sub.swf访问的函数 function mainCallSub(){ trace("mainCallSub !"); } (二)再讲as3. main.swf主时间轴第一帧代码: import flash.display.*; import flash.net.URLRequest; import flash.events.Event; var swfLdr:Loader = new Loader(); var swfURL:String = "sub.swf" var swfURLReq:URLRequest = new URLRequest(swfURL); swfLdr.load(swfURLReq); sub_mc.addChild(swfLdr); swfLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded); function swfLoaded(event:Event):void { main_btn.addEventListener(MouseEvent.CLICK, mainBtnClick); } function mainBtnClick(event:Event):void { (swfLdr as MovieClip).mainCallSub();//先把swfLdr转换成显示对象容器,然后再调用函数 } //被sub.swf访问的函数 function subCallMain(){ trace("subCallMain !"); } sub.swf主时间轴第一帧代码: sub_btn.addEventListener(MouseEvent.CLICK, subBtnClick); function subBtnClick(event:Event):void { this['parent']['parent'].subCallMain();//调用main.swf主场景名为subCallMain的函数,写成“this.parent.parent”将报错 } //被sub.swf访问的函数 function mainCallSub(){ trace("mainCallSub !"); } 对于as3,还有其他方法来实现,这里代码都是写在时间轴上的,没有用文档类分离代码 |
相关文章推荐
- 加载swf后的父swf和子swf的通信问题
- StyleManager.loadStyleDeclarations加载swf的路径问题
- flash/flex/as3应用程序加载as2、as1版本的swf遇到的问题
- JSP通过action跳转时css和js和swf无法加载问题
- FlashDevelop加载SWF问题汇总
- 解决加载swf报错问题
- 加载SWF 通信
- 解决SWF加载报错问题
- loadMovie加载外部swf的大小问题
- 基于Tomcat服务的系统JSP页面不加载SWF问题的解决方案
- 关于swf 在flexPaper不能正常加载的问题
- air加载本地swf并与之通信
- flash加载外部swf文件层次问题
- freemarker生成world转PDF转SWF,加载到浏览器.解决最终浏览器加载的是xml代码的问题.
- 动态加载swf的奇怪问题
- 主swf控制多个加载进来的swf的播放(多个swf之间的通信练习)
- 改变css导致Flash swf 重新加载的问题
- loader加载的swf,loading期间声音先播放的问题
- 解决SWF加载报错问题 —以及利用该错误防止盗链
- 【问题解决】把在vs2013中加载vs2010的串口通信项目中所遇问题