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的方法函数
<invoke name=”functionName” returntype=”xml”>
??? <arguments>
??????? … (individual argument values)
??? </arguments>
</invoke>
返回结果(XML)
<type></type>
支持以下类型:
<null />
<true /><false />
<string></string>
<number></number>
<array></array>
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:String)
{
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