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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。