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的方法函数
<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
Recent Comments