WEB开发网
开发学院图形图像Flash AS3和AS2实现加载与被加载swf通信的不同之处 阅读

AS3和AS2实现加载与被加载swf通信的不同之处

 2012-02-06 12:15:19 来源:本站整理   
核心提示:做flash应用,经常要用到swf与swf之间的通信,AS3和AS2实现加载与被加载swf通信的不同之处,而加载与被加载swf之间的通信最为常见,而习惯了as2开发的同学,还有其他方法来实现,这里代码都是写在时间轴上的,转到as3开发时,会觉得有点不适应

做flash应用,经常要用到swf与swf之间的通信,而加载与被加载swf之间的通信最为常见。而习惯了as2开发的同学,转到as3开发时,会觉得有点不适应,下面就讲下as3和as2实现加载与被加载swf通信的不同之处。

(一)先讲as2.
  在as2中,无论你用loadMovie还是loadClip加载进来一个swf,只要知道他们的层级关系,都可以用this、_parent等轻松相互控制。下面以main.swf和sub.swf为例:

main.swf主时间轴第一帧代码:

  1. var my_mcl:MovieClipLoader = new MovieClipLoader();  
  2. var mclListener:Object = new Object();  
  3. //加载完毕  
  4. mclListener.onLoadInit = function(target_mc:MovieClip):Void {  
  5. main_btn.onRelease = function(){  
  6. sub_mc.mainCallSub();//点击main.swf主场景名为main_btn的按钮,调用sub.swf主场景名为mainCallSub的函数  
  7. }  
  8. }  
  9. my_mcl.addListener(mclListener);  
  10. sub_mc._lockroot = true;//锁定被加载swf的主时间轴,让_root统一指向main.swf的主时间轴  
  11. my_mcl.loadClip("sub.swf", sub_mc);//把sub.swf加载到main.swf主场景名为sub_mc的剪辑中。  
  12. //被sub.swf访问的函数  
  13. function subCallMain(){  
  14. trace("subCallMain !");  

sub.swf主时间轴第一帧代码:

  1. sub_btn.onRelease = function(){  
  2. this._parent._parent.subCallMain();

    //点击sub.swf主场景名为sub_btn的按钮,调用main.swf主场景名为subCallMain的函数  
  3. //当然,也可以直接一点,用_root.subCallMain();

    //但前提是main.swf上加上
    sub_mc._lockroot = true;不然访问的是自己的时间轴  
  4. }  
  5. //被sub.swf访问的函数  
  6. function mainCallSub(){  
  7. trace("mainCallSub !");  

(二)再讲as3.
main.swf主时间轴第一帧代码:

  1. import flash.display.*;  
  2. import flash.net.URLRequest;  
  3. import flash.events.Event;  
  4.  
  5. var swfLdr:Loader = new Loader();  
  6. var swfURL:String = "sub.swf" 
  7. var swfURLReq:URLRequest = new URLRequest(swfURL);  
  8. swfLdr.load(swfURLReq);  
  9. sub_mc.addChild(swfLdr);  
  10. swfLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded);   
  11. function swfLoaded(event:Event):void  
  12. {  
  13. main_btn.addEventListener(MouseEvent.CLICK, mainBtnClick);  
  14. }  
  15. function mainBtnClick(event:Event):void  
  16. {  
  17. (swfLdr as MovieClip).mainCallSub();

    //先把swfLdr转换成显示对象容器,然后再调用函数  
  18. }  
  19.  
  20. //被sub.swf访问的函数  
  21. function subCallMain(){  
  22. trace("subCallMain !");  

sub.swf主时间轴第一帧代码:

  1. sub_btn.addEventListener(MouseEvent.CLICK, subBtnClick);  
  2. function subBtnClick(event:Event):void  
  3. {  
  4. this['parent']['parent'].subCallMain();

    //调用main.swf主场景名为subCallMain的函数,写成“this.parent.parent”将报错  
  5. }  
  6.  
  7. //被sub.swf访问的函数  
  8. function mainCallSub(){  
  9. trace("mainCallSub !");  

对于as3,还有其他方法来实现,这里代码都是写在时间轴上的,没有用文档类分离代码。

Tags:AS AS 实现

编辑录入:coldstar [复制链接] [打 印]
赞助商链接