banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

ActionScript 學習手記之ExternalInterface的使用

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。