博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
主swf与被加载swf的通信问题
阅读量:4169 次
发布时间:2019-05-26

本文共 1984 字,大约阅读时间需要 6 分钟。

做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,还有其他方法来实现,这里代码都是写在时间轴上的,没有用文档类分离代码

转载地址:http://eagxi.baihongyu.com/

你可能感兴趣的文章
嵌入式100题(042):为什么服务端易受到SYN攻击?
查看>>
嵌入式100题(043):什么是四次挥手
查看>>
嵌入式100题(044):为什么客户端最后还要等待2MSL?
查看>>
嵌入式100题(045):为什么建立连接是三次握手,关闭连接确是四次挥手呢?...
查看>>
嵌入式100题(028):static的用法(定义和用途)
查看>>
嵌入式100题(027):char和int之间的转换
查看>>
嵌入式100题(029):const常量和#define的区别(编译阶段、安全性、内存占用等)...
查看>>
嵌入式100题(030):volatile作用和用法
查看>>
嵌入式100题(033):TCP、UDP的优缺点
查看>>
嵌入式100题(035):TCP为什么是可靠连接
查看>>
嵌入式100题(034):TCP UDP适用场景
查看>>
嵌入式100题(70):一个程序从开始运行到结束的完整过程(四个过程)
查看>>
嵌入式100题(71):什么是堆,栈,内存泄漏和内存溢出?
查看>>
嵌入式100题(73):死锁的原因、条件 创建一个死锁,以及如何预防
查看>>
嵌入式100题(60):系统调用的作用
查看>>
C语言基本概念归纳
查看>>
初识单片机
查看>>
在单片机上点亮LED
查看>>
初学定时器
查看>>
数码管
查看>>