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