Home > 语言编程 > ActionScript 学习手记之ExternalInterface的使用

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:

1
2
3
4
5
6
7
8
9
10
11
12
import flash.external.ExternalInterface;
//调用C#函数
//flash2Csharp函数名,参数"test"
ExternalInterface.call ("flash2Csharp", "test");
//注册C# 回调函数
//Csharp2flash函数名
ExternalInterface.addCallback ("Csharp2flash",Csharp2flash);
//注册函数
function Csharp2flash (s:String)
{
    trace(s);
}

C#部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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

Categories: 语言编程 Tags: , ,
  1. No comments yet.
  1. No trackbacks yet.