Flex通讯系列---Flex与SWF
一、Flex与Flex(内嵌)通讯。
二、Flex与AS(内嵌)通讯。(Next)
这里讲述的是在Flex Application中嵌套一个SWF,然后实现Flex与SWF相互间的通讯。我们需要引入SystemManager接口实现。
下面我们来看一下《Flex 3 参考手册》对SystemManager的描述,你大约就知道怎么回事,使用里面现成的属性和方法就可以实现Flex与SWF的通讯啦。
每个应用程序都包含一个 SystemManager。如果应用程序窗口的大小发生更改(您无法在应用程序中更改其大小,只能通过与操作系统窗口或浏览器交互来进行更改),则 SystemManager 会发送一个事件。它是应用程序中所有可显示项目(例如 mx.core.Application 主实例以及所有弹出窗口、工具提示、光标等)的父项。任何以 SystemManager 作为父项的对象都将被视为“顶级”窗口,就连工具提示和光标也是如此。
是的,要实现Flex调用嵌套SWF,主要我们在SWF中为Flex打开方便之门就可以了,也就是设计一个public function,难道这还不够简易?下面说一下简单的实现:
1、在Flex Application(如命名为Main.mxml)中通过SwfLoader标签加载Swf文件:
2、在Game01.mxml中设计一个public function。如:
3、在Main.mxml中调用:
我们先来了解两个内容,一个事SwfLoader的content属性,另一个是Application.application。
SwfLoader - content
content 属性
content:DisplayObject []
此属性包含表示在 SWFLoader 控件中加载的内容的对象。
Application - application
很明显,通过这样简单的两句话就可以获取到Flex Application 层次下的public方法。
好了,至此已经可以实现了Flex向SWF通讯了。那么SWF怎么可以反过来跟FLEX说话呢?原理是一样的,Flex开放一些function,然后SWF就可以直接调用那些function了。
4、如在Main.mxml中加入:
5、回去Game01.mxml可以直接通过如下代码调用:
接下来我们需要看一下两个属性:
UIComponent:
这个层次我是通过Debug对象层层查找出来的,层次不同当然需要改一下了,甚至可以直接跳到几层,直接到最外层,这个自己再去查查,呵呵。
源代码下载:准备上传
parent 属性
parent:DisplayObjectContainer []
此组件的父容器或组件。只有 UIComponent 对象应该具有父属性。非 UIComponent 对象应该使用其它属性引用其所属对象。一般而言,非 UIComponent 对象使用 owner 属性引用其所属对象。
DisplayObject:
root 属性
root:DisplayObject []
对于加载的 SWF 文件中的显示对象,root 属性是此 SWF 文件所表示的显示列表树结构部分中的顶级显示对象。对于代表已加载图像文件的位图对象,root 属性就是位图对象本身。对于第一个加载的 SWF 文件的主类的实例,root 属性就是显示对象本身。Stage 对象的 root 属性是 Stage 对象本身。对于任何未添加到显示列表的显示对象,root 属性设置为 null,除非它已添加到符合以下条件的显示对象容器:不在显示列表中,但属于已加载 SWF 文件中顶级显示对象的子级。
application属性
application:Object []
对顶级应用程序的引用。
通常,Application 对象可能存在层次结构,因为 Application 可以使用 SWFLoader 控件动态加载其它 Application。可通过 UIComponent 的 parentApplication 属性访问 UIComponent 所在的子 Application,并可以在层次结构中向上浏览到顶级 Application。