Flash可以做很多丰富表现力的动画效果和交互效果,这是flex不能比拟的。
但并不意味着Flex不能实现同样的效果。
Flex程序整合Flash并不难,因为他们都是用ActionScript语言。
Flex同样可以控制Flash
在Flex中插入Flash是提高程序交互性的好方法。
可以把Flex和Flash的优点都发挥出来。
但是有一个AS版本的问题:当加载swf文件时,被加载的文件和主文件都运行在FlashPlayer中。
Flex采用了As3.0语言,对应的swf文件被播放器的AVM2(虚拟机)解释执行,
当加载的swf不是as3.0语言时,播放器会使用AVM1解释执行。
这2个版本无法传递信息,导致Flex无法确定Swf文件的位置,也无法使用里面的函数、变量。使得交互大打折扣。
使用flash.net.LocalConnection对象可以巧妙的解决这个问题。可以避开播放器限制,不管swf运行在AVM1上
还是AVM2上,都可以相互通讯。
例子:
Flex(as3的swf) 传递 数值 给一个as2的swf
1
2
<?
xml version="1.0" encoding="utf-8"
?>
3
<
mx:Application
xmlns:mx
="http://www.adobe.com/2006/mxml"
layout
="absolute"
creationComplete
="initApp()"
>
4
<
mx:Script
>
5
<![CDATA[
6
import flash.net.LocalConnection;//导入LocalConnection类
7
private var CNum:Number=0;//Flex变量 传递给as2的swf
8
private var sendConn:LocalConnection;
9
//
10
internal function initApp():void{
11
//创建一个 LocalConnection实例
12
sendConn = new LocalConnection();
13
//
14
}
15
16
internal function addNum():void{
17
CNum++;
18
trace(CNum+" cc")
19
//send(连接名:String,Flash里的方法:String,参数)
20
sendConn.send("flexToSwf","showNum",CNum);
21
}
22
public function reduceNum():void{
23
CNum--;
24
trace(CNum+" dd")
25
//send(连接名:String,Flash里的方法:String,参数)
26
sendConn.send("flexToSwf","showNum",CNum);
27
28
}
29
]]>
30
</
mx:Script
>
31
<
mx:SWFLoader
x
="30"
y
="10"
source
="test.swf"
/>
32
<
mx:Button
x
="48"
y
="403.5"
label
="参数+1"
click
="addNum()"
/>
33
<
mx:Button
x
="99"
y
="403.5"
label
="参数-1"
click
="reduceNum()"
/>
34
35
36
</
mx:Application
>
37
38
39
打开Flash ,新建一个As2的Flash
按F9 输入代码:
Code
stop();
//声明一个LocalConnection实例 用于和as3的swf通讯
//注:Flex也是生成一个swf,其语言是AS3
var localConn:LocalConnection = new LocalConnection();
var data:Number;
localConn.showNum = function(num) {
data=num;//取得从as3的swf的参数
trace("yes "+data)
}
//此处的连接 应该与as3的相同
localConn.connect("flexToSwf");