FC2ブログ
 
■プロフィール

クリエイトウェーブ

Author:クリエイトウェーブ
開発における、諸々を書いていきたいなと思っています。
mail : info@createwave.jp

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ

■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
C#とFlashの連携その4
だいだい出来てきたけど、まだ位置が固定されている。
やはりドラッグアンドドロップできるようにせねば・・・・

フォームのイベントとかになんか、処理すればいい気もするけどそれじゃ透けてる部分とかフォームのサイズによってはswfが無い部分も反応しそうなのでFlash側からC#側に指令を送るようにしてみました。

調べてみると想像してたけどfscommandでやりとりできるみたい。
C#からFlashに送る時は、SetVariableとか・・・
なんか昔のDirectorとFlashのやりとりとそっくりだ。

さすがにDirectorはMX2004になってからは直接埋め込んだFlashのメソッド呼べるし、返り値も受け取れる。それにFlash上のプロパティもそのまま使えれば、わざわざswfを埋め込まなくてもLingo上でそのままActionScriptオブジェクト作ってActionScriptを書くのも可能だ。その辺は、さすがに同じソフトメーカー製品ですっごく使いやすい。

なのでDirector(Lingo)で、SetVariableを使う事はなくなったけど・・・

横道に逸れた・・・C#とFlashに話を戻すと
ActionScript3だとExternalAPIを呼び出しでもっと柔軟にやりとりするサイトも発見!

ExternalAPI自体はFlash8のActionScript2にも実装されている。
実際javaScriptとかのやりとりもExternalAPIでやった方が柔軟だったりするので、ActionScript2でもExternalAPIをimportしてC#とやりとり出来るのでは?

と、一瞬思ったのですが、よく判んなかったので結局fscommandを使う事に。
今度、暇な時に、調べておこうっと・・

Flash側。表示されてるムービークリップを掴んだらC#側にfscommand を使って"mov"を送って、離したら"stop"を送る。

_mc.onPress = function ()
{
   fscommand ("mov", "");
};
//
_mc.onRelease = _mc.onReleaseOutside = function ()
{
   fscommand ("stop", "");
};


次はC#側。
まずはfscommand を受け取れるようにしなくっちゃ。
これもすっごく簡単!

フォーム上のswfを選んでプロパティウィンドウの中身をプロパティからイベントに切り替えてあげる。

表示されるイベントの中から、fscommand を選んでダブルクリックするだけだ!

そしたらプログラムウィンドウに切り替わって
private void axShockwaveFlash1_FSCommand

ってイベントメソッドが出来上がってるので、そこに書くだけ。

switch (e.command)
{
  case "move":
   dragPos.X = this.Location.X - Cursor.Position.X;
   dragPos.Y = this.Location.Y - Cursor.Position.Y;
   this.timer1.Start();
   break;
  case "stop":
   this.timer1.Stop();
   break;
}

もっといい方法があるのかもしれないけど、結局timerでやってしまった。
private void timer1_Tick(object sender, EventArgs e)
{
  Point pos = Cursor.Position;
  this.Location = new Point(pos.X + dragPos.X, pos.Y + dragPos.Y);
}

これでswfが、つかめてグリグリ移動できるようになりました!

カテゴリー:.NET | TM(0) | CM(0)