温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Flex与Flex swf如何实现通讯

发布时间:2021-11-24 10:04:11 来源:亿速云 阅读:120 作者:柒染 栏目:编程语言

Flex与Flex swf如何实现通讯,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Flex通讯系列---Flex与Flex swf

这里讲述的是在FlexApplication中嵌套一个Flex swf,然后实现Flex与Flex swf相互间的通讯。我们需要引入SystemManager接口实现。

下面我们来看一下《Flex3参考手册》对SystemManager的描述,你大约就知道怎么回事,使用里面现成的属性和方法就可以实现Flex与Flex swf的通讯啦。

每个应用程序都包含一个SystemManager。如果应用程序窗口的大小发生更改(您无法在应用程序中更改其大小,只能通过与操作系统窗口或浏览器交互来进行更改),则SystemManager会发送一个事件。它是应用程序中所有可显示项目(例如mx.core.Application主实例以及所有弹出窗口、工具提示、光标等)的父项。任何以SystemManager作为父项的对象都将被视为“***”窗口,就连工具提示和光标也是如此。

是的,要实现Flex调用嵌套Flex swf,主要我们在Flex swf中为Flex打开方便之门就可以了,也就是设计一个publicfunction,难道这还不够简易?下面说一下简单的实现:

1、在FlexApplication(如命名为Main.mxml)中通过Flex swfLoader标签加载Flex swf文件:

viewplaincopytoclipboardprint?  <mx:Flex swfLoaderid="Flex swfLoader"source="Game01.Flex swf"/> <mx:Flex swfLoaderid="Flex swfLoader"source="Game01.Flex swf"/>

2、在Game01.mxml中设计一个publicfunction。如:

viewplaincopytoclipboardprint?  publicfunctioninvokeByOutsideFlex():void{  trace("Success...");  }  publicfunctioninvokeByOutsideFlex():void{  trace("Success...");  }

3、在Main.mxml中调用:

viewplaincopytoclipboardprint?
Object(Object(Flex swfLoader.content).application).invokeByOutsideFlex();
//其实第二个Object具体是SystemManager对象,所以也可以写作
Object(SystemManager(Flex swfLoader.content).application).invokeByOutsideFlex();
Object(Object(Flex swfLoader.content).application).invokeByOutsideFlex();
//其实第二个Object具体是SystemManager对象,所以也可以写作
Object(SystemManager(Flex swfLoader.content).application).invokeByOutsideFlex();
我们先来了解两个内容,一个事Flex swfLoader的content属性,另一个是Application.application。

◆Flex swfLoader-content

content属性

content:DisplayObject[]
此属性包含表示在Flex swfLoader控件中加载的内容的对象。

Application-application

很明显,通过这样简单的两句话就可以获取到FlexApplication层次下的public方法。

好了,至此已经可以实现了Flex向Flex swf通讯了。那么Flex swf怎么可以反过来跟FLEX说话呢?原理是一样的,Flex开放一些function,然后Flex swf就可以直接调用那些function了。

4、如在Main.mxml中加入:

viewplaincopytoclipboardprint?  publicfunctioninvokeByInsideFlex swf():void{  trace("Igetit...");  }  publicfunctioninvokeByInsideFlex swf():void{  trace("Igetit...");  }

5、回去Game01.mxml可以直接通过如下代码调用:

viewplaincopytoclipboardprint?  Object(SystemManager(this.parent.parent.root).application).invokeByInsideFlex swf();  //SystemManager可以改成Object,多态特性  Object(SystemManager(this.parent.parent.root).application).invokeByInsideFlex swf();  //SystemManager可以改成Object,多态特性

接下来我们需要看一下两个属性:

◆UIComponent:

这个层次我是通过Debug对象层层查找出来的,层次不同当然需要改一下了,甚至可以直接跳到几层,直接到最外层,这个自己再去查查,呵呵。

源代码下载:准备上传

parent属性

parent:DisplayObjectContainer[]
此组件的父容器或组件。只有UIComponent对象应该具有父属性。非UIComponent对象应该使用其它属性引用其所属对象。一般而言,非UIComponent对象使用owner属性引用其所属对象。

◆DisplayObject:

root属性

root:DisplayObject[]
对于加载的Flex swf文件中的显示对象,root属性是此Flex swf文件所表示的显示列表树结构部分中的***显示对象。对于代表已加载图像文件的位图对象,root属性就是位图对象本身。对于***个加载的Flex swf文件的主类的实例,root属性就是显示对象本身。Stage对象的root属性是Stage对象本身。对于任何未添加到显示列表的显示对象,root属性设置为null,除非它已添加到符合以下条件的显示对象容器:不在显示列表中,但属于已加载Flex swf文件中***显示对象的子级。

application属性

application:Object[]
应用程序的引用。
通常,Application对象可能存在层次结构,因为Application可以使用Flex swfLoader控件动态加载其它Application。可通过UIComponent的parentApplication属性访问UIComponent所在的子Application,并可以在层次结构中向上浏览到Application。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI