文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Flex与Flex swf如何实现通讯

2023-06-17 15:24

关注

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,难道这还不够简易?下面说一下简单的实现:

在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"/>

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

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

在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了。

如在Main.mxml中加入:

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

回去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。

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯