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 要素は入力パラメータを示し、1 つまたは複数のパラメータを持つことができます。これらは呼び出す関数のパラメータリストと同じでなければなりません。
以下は Flash と C# の相互操作のデモです。
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