Flash ActionScript 學習手記之 ExternalInterface 的使用回家之前接到來自學校軟體協會的一個開發任務,要求實現.Net 與 Flash 之間的相互操作,具體要求實現 C# 對 flash 對象 (DisplayObject 和 DisplayObjectContainer) 的操作,包括插入、刪除、複製、同時還要實現對象的放大、縮小、旋轉、轉置,圖層移動等等
現在開發基本結束,發布一下我的 AS 學習手記,說實話,在接到任務之前我是對 flash 和 AS 一竅不通,不過現在通了是通了一竅了,哈哈。 源代碼可以參閱http://www.lidaren.com/archives/301
Flash ActionScript 學習手記一 ExternalInterface 的使用,實現與 C# 的相互操作
flash AS 使用 API XML 來實現與 Flash 控件的通信具體的格式使用如下:
外部調用 Flash 的方法函數 ??? ??????? ... (individual argument values) ???
返回結果 (XML) 支持以下類型:
invoke 節點中的屬性 “name” 表示訪問的函數名,“RETURNType” 表示返回結果 類型,目前 AS3 支持 Byte, XML 和 JSON argument 節點表示輸入參數,可以是一個或者多個,必須與被調函數的參數列表相同
以下是 Flash 與 C# 交互的 demo
Flash ActionScript:
import flash.external.ExternalInterface;
// 調用 C# 函數
//flash2Csharp 函數名,參數 "test"
ExternalInterface.call ("flash2Csharp", "test");
// 註冊 C# 回調函數
//Csharp2flash 函數名
ExternalInterface.addCallback ("Csharp2flash",Csharp2flash);
// 註冊函數
function Csharp2flash (s)
{
trace(s);
}
C# 部分
public class Form1 : Form
{
//...
....
//...
private AxShockwaveFlashObjects flash = new AxShockwaveFlashObjects();
private void Form1\_Load(object sender, EventArgs e)
{
flash.Movie = "test.swf"; //設置flash控件的播放文件
flash.FlashCall +=
new AxShockwaveFlashObjects
.\_IShockwaveFlashEvents\_FlashCallEventHandler(flash\_FlashCall);
//添加flashcall事件
this.CallFlash();
}
//flashCall,flash調用C#中的函數
private void flash\_FlashCall
(object sender,
AxShockwaveFlashObjects.\_IShockwaveFlashEvents\_FlashCallEvent e)
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(e.request);
XmlNodeList list = doc.GetElementsByTagName("arguments");
string s =
list\[0\].ChildNodes\[0\].InnerText.ToString();
//解析XML
this.flash2Csharp(s);
}
private void CallFlash()
{
//C#調用Flash
flash.CallFunction("test");
}
private void flash2Csharp(string s)
{
MessageBox.Show(s);
}
}
其他內容可以參閱 Adobe 的示例: http://www.adobe.com/go/learn_programmingAS3samples_flash_cn