如何在Flex 2中使用 ActionScript 2 SWF
作者:surpass 2006-10-11 15:39:43
标签:
英文原文:《Using ActionScript 2 SWFs with Flex 2 》
原文地址:http://weblogs.macromedia.com/pent/archives/2006/07/using_actionscr.cfm
译文作者:Dreamer 。其他版权声明请参考置顶日志。
如何在Flex 2中使用 ActionScript 2 SWF
Flash Player 技术的好处之一就是你可以用最适合你的方式来写应用程序。例如,你可以使用Flash 8 开发有很高冲击力的动画效果或者使用Flex创建引人注目的商业应用程序。
更加好的是可以把这二者结合在一起使用。在Flash中创建动画并整合到Flex程序中并不是很不平常。因为Flex和Flash都是通过ActionScript驱动的语言,Flex应用程序可以控制Flash动画,反之亦然。
使用Flash 8,Flash MX 2004 或者Flash MX 和Flex1.5做到这些相对来说很容易,但是如果使用Flex 2 和Flash Player 9就不是这样了。我将会说明如何去做并且我希望你能意识到事实上,这是实现二者结合得一个比较好的方法。
如你可能知道得那样,Flex 2 SWF 文件需要Flash Player 9。那是因为Flex 2使用ActionScript的3.0版本并且开发Flash Player 9(我曾说过,从底层的开发)是为了是用ActionScript 3。通过更健壮的数据定义和面向对象结构,ActionScript 3向更高级的Flash Player表现提供了一个更好的平台。
然而像所有版本的Flash Player一样,Flash Player 9 也是向后兼容的。这就是说,它可以运行那些针对旧版本的Flash Player创建的SWF文件。但是这次情况与以往不同。当Flash Player 9加载用ActionScript 2(或更早的版本)编写的SWF时,它会创建一个虚拟机——一个同逻辑一起被加载用来运行ActionScript 2 SWF的独立区域。我们叫它 AVM。当Flash Player 9 已经加载了一个Flex 2 SWF接着又接收到一个加载AS2 SWF的请求时,这个AS 2 SWF被加载到它自己的AVM中。所以这两个SWF运行在Flash Player中的不同的区域中。不同并且相互孤立的区域。
这就是说你的Flex 2程序不能确定AS 2 SWF的位置、到达它的内部并且引用它的函数,变量和时间线。同样地,AS2 SWF也不能只靠简单的引用来从Flex 2应用程序中获得任何东西。
解决办法是使用 LocalConnection——Flash Player和Flash Player直接的通讯系统。如果你以前没有使用过 LocalConnection,花一点时间研读它。你可能因此为你的下一个项目获得灵感。
要观看这个例子的演示,点击这个链接:Flex 2 and Flash Demo并确认你的浏览器安装了Flash Player 9。它会在一个新窗口中打开。
在这里下载源代码
简要地说,LocalConnection 可以让一个Flash Player向运行在同一个桌面上的一个或者多个其他的Flash Player发送消息。这些Flash Player可以在相同的HTML页中,也可以在不同的frame中,甚至可以在不同的浏览器中。例如,假设你创建了一个有3个frame的HTML页:顶部frame用来放置banner,侧边frame放置菜单,中间frame用来放置内容。你希望banner和menu是Flash动画。你还希望当选中menu SWF的时候会改变banner SWF中的内容。因为这些 SWF 运行在不同的Flash Player中,所以你可以使用 LocalConnection让menu SWF 向banner SWF发送消息。
LocalConnection 是一个单向的消息。一个SWF监听其他SWF发送的消息。如果你希望双向的通讯,两个SWF都需要创建LocalConnection并以不同的名字命名。
LocalConnection在Flash Player 9 AVM之间也可以工作。
Flash
在你的Flash 程序中创建一个LocalConnection对象并向其中添加你希望Flex程序调用的函数。这些就是前面我提到的“消息”。
程序代码 程序代码
var fromFlex_lc:LocalConnection = new LocalConnection();
fromFlex_lc.stopMe = function() { stop(); }
fromFlex_lc.playMe = function() { play(); }
fromFlex_lc.connection( "lc_from_flex" );
stopMe 和 playMe函数非常简单,它们只是停止和播放时间线。当然,它们也可以变得很复杂。当用户点击一个button的时候Flex将会调用它们。
Flex
在你的Flex 程序中,创建一个LocalConnection对象并利用它来调用 Flash SWF中的stopME和 playMe函数。
程序代码 程序代码
import flash.net.LocalConnection;
var toFlash_lc:LocalConnection = new LocalConnection();
<mx:Button label="Stop" click="toFlash_lc.send('lc_from_flex', 'stopMe')" />
<mx:Button label="Play" click="toFlash_lc.send('lc_from_flex', 'playMe')" />
这些Button调用了LocalConnection.send()方法,命名了Flash SWF正在监听的connection。Send()的第二个参数是将要调用的函数名。如果这些函数有参数的话,那些参数写在方法名的后面。
Flash to Flex
你可能会推测,让Flash SWF向 Flex SWF发送消息就是把上面的过程逆转过来。这是正确的,唯一的不同就是在什么地方定义LocalConnection.send()方法调用的消息。
在Flex程序中创建一个含有你想要从LocalConnection调用的函数的对象。例如:
程序代码 程序代码
<mx:Application xmlns:mx="..." initialize="initApp()" >
<mx:Script>
<![CDATA[
import flash.net.LocalConnection;
public function showDetails() : void {
// do something
}
private var fromFlash_mc:LocalConnection;
private function initApp() : void {
fromFlash_lc = new LocalConnection();
fromFlash_lc.client = this;
fromFlash_lc.connect("lc_from_flash");
}
]]>
</mx:Script>
...
</mx:Application>
Flash SWF 现在可以为LocalConnection调用名字为“client”的对象中的任意public的方法。在这个例子中目的就是让Flash SWF调用 showDetails()方法。
分享到:
相关推荐
在本文中,我们将深入探讨如何使用Flex来控制SWF(Shockwave Flash)文件的播放。Flex是一种基于ActionScript 3的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据绑定机制...
这些组件可以直接在MXML中使用。 4. **数据绑定**:Flex支持强大的数据绑定机制,可以轻松实现数据模型和视图之间的同步更新。 5. **事件处理**:Flex中的事件处理机制使得响应用户的操作变得简单直接,如鼠标点击、...
在本文中,我们将深入探讨如何在Flex应用中加载由ActionScript 2(AS2)编写的SWF文件,以及这背后的原理和技术细节。Flex是一种基于Adobe Flash Platform的开放源码框架,主要用于构建富互联网应用程序(RIA)。而...
在IT行业中,Flex是一种基于ActionScript 3.0和Flash Player的开源框架,主要用于构建富互联网应用程序(RIA)。本篇文章将深入探讨如何使用Flex来控制SWF文件,以及相关的关键技术点。 首先,SWF全称是Small Web ...
在探讨SWF之间以及Flex与SWF之间的通信时,我们首先需要了解SWF文件的基本概念及其在Adobe Flash平台中的作用。SWF(Shockwave Flash)是一种被广泛应用于网页动画、游戏和其他交互式内容的格式。随着互联网技术的...
在FLEX中,应用程序通常由两大部分组成:GUI(图形用户界面)和ACTIONSCRIPT代码。GUI使用MXML语言描述,这是一种基于XML的标记语言,类似于HTML。MXML文件定义了用户界面的布局和组件,而ACTIONSCRIPT则处理逻辑和...
样式在Flex2中是关键元素,它们可以用来改变组件的颜色、字体、边框等特性,实现一致且吸引人的设计。 3. **Flex中文帮助** 这可能是一个包含Flex2中文文档的文件或目录,对于初学者来说极为宝贵。文档通常包括API...
在Flex中加载外部SWF文件,我们可以使用`Loader`类。`Loader`类是ActionScript 3.0中的核心组件,负责加载各种类型的媒体,包括图像、视频和SWF文件。以下是一个基本的加载SWF的示例代码: ```actionscript var ...
3. **编译与部署**: 使用Flex Compiler将MXML和ActionScript代码编译为SWF文件,这是在浏览器中运行Flex应用程序的格式。然后,这些SWF文件可以部署到Web服务器上供用户访问。 三、Flex2的交互与数据绑定 1. **...
4. **发布设置**:在Flash或Flex的发布设置中,可以选择优化、压缩和排除未使用的资源等选项来减小SWF体积。例如,开启ActionScript优化和使用压缩SWF功能。 5. **使用AJSPlayer**:提到的AJSPlayer可能是一个第三...
- 文件“library.swf”可能包含了项目中使用的库资源,如自定义组件、动画效果等,这有助于减少主SWF文件的大小并优化加载速度。 - “catalog.xml”可能是库资源的元数据文件,描述了库中各个组件的属性和行为。 ...
综上所述,这个示例主要展示了如何在ActionScript3中使用Loader类加载SWF文件,并通过按钮控制加载的SWF播放不同的动画片段。同时,它还暗示了更复杂的Flex游戏开发中可能涉及的Socket通信技术,尽管在这个具体示例...
在 HTML 中嵌入 Flex SWF 文件,通常使用的是 Adobe 提供的 `SWFObject` JavaScript 库。这个库能够帮助我们优雅地处理浏览器兼容性问题,同时提供了一种简单的方法来插入 SWF 文件并传递参数。下面详细介绍如何实现...
在Flex2中,ActionScript3作为编程语言,提供了更强大、类型安全的语法和性能提升。相比于早期的ActionScript版本,ActionScript3支持类和包的概念,这使得代码组织更加有序,可维护性更强。Flex2的MXML标记语言也极...
今天花了一些时间整理出来了Swf 文件与JavaScript通信的示例,...在HTML页中使用JavaScript,可以调用FlashPlayer中的ActionScript函数。ActionScript函数可以返回一个值,JavaScript会立即接收它作为该调用的返回值。
Flex生成的SWF文件与Flash生成的一样,都是在Flash Player中运行。但Flex的组件库更加丰富和强大,更适合创建复杂的用户界面和企业级应用。Flex SDK提供了一个完整的开发环境,包括编译器、IDE(如Flex Builder,现...
本文将详细解析如何在JSP页面中嵌套使用Flex生成的SWF文件来创建自定义的系统拓扑图。 首先,Flex是一种基于ActionScript的开放源代码框架,用于构建具有交互性和动态效果的RIA。它允许开发者创建美观且功能丰富的...