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 輸入代碼:

ipq5018 flash鏡像製作_xmlipq5018 flash鏡像製作_xml_02Code

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");