AS3和AS2实现加载与被加载swf通信的不同之处
做flash应用,经常要用到swf与swf之间的通信,而加载与被加载swf之间的通信最为常见。而习惯了as2开发的同学,转到as3开发时,会觉得有点不适应,下面就讲下as3和as2实现加载与被加载swf通信的不同之处
做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,还有其他方法来实现,这里代码都是写在时间轴上的,没有用文档类分离代码。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...