Flash AS3.0とVB.NETの連携について記載します。
ここではFlashVarsとFSCommandを使用したサンプルを記載します。
この方法では以下の制限があります。
・FLASH→VB.NETへの値の送信はイベントドリブンに行えます。
・VB.NET→FLASHへの値の送信はFLASH起動時に1回しか行えません。
実行環境
◆ActionScript3.0 / Adobe Flash CS 5
※CS4でも問題なく動作しますが、ActionScript2.0では構文が違うため使用できません。
◆Microsoft Visual Studio 2008 Professional(VB.NET)
.NET Framework 2.0
ShockWave Flash(Flash.OCX)コンポーネント
※2003/2005でも、VB6.0でもほとんど同じだと思います。
サンプルプロジェクト
ここで使用するプロジェクトは以下からダウンロードできます。
サンプルプロジェクトのダウンロード
解凍すると以下の構成になっています。
./flash_src
+ trx_with_vb.fla ----> FLASH CS 5.0プロジェクト
+ trx_with_vb.as3prj ----> Flash Develop用プロジェクト
+ Main.as ----> ASソースファイル
./vb_src
+ FlashSample
| + frmMain.vb ----> メインフォームクラス
+ FlashSample.sln ----> VB.NETプロジェクトファイル
+ SampleProject.suo
Flash側のソース
◆コマンドの送信
fscommand関数にてVB.NET側にコマンドを送信することができます。
fscommand( "コマンド名", "パラメータ" ) となります。
VB.NET側では xxx_FSCommand( sender, event ) として値を受け取ることができます。
◆コマンドの受信
起動時にloaderInfoクラスからパラメータを読み出します。
loaderInfo.parameters[ "変数名" ] で読み出すことができます。
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. |
44. |
45. |
46. |
47. |
48. |
49. |
50. |
51. |
52. |
|
package { |
import flash.display.MovieClip; |
import flash.events.MouseEvent; |
import flash.system.fscommand; |
? |
public class Main extends MovieClip { |
|
var m_Count:Number; |
? |
public function Main() { |
? |
|
this.stop(); |
? |
m_Count = 0; |
? |
|
|
|
this.mcSendButton.addEventListener(MouseEvent.CLICK, |
function(avEvent:MouseEvent ) { SendCtrlAppli(); } ); |
? |
? |
|
|
|
try { |
txtReceive.text = loaderInfo.parameters["ApplNotify"]; |
txtSub.text = loaderInfo.parameters["ApplTest"]; |
}catch ( ex:Error ) { |
txtReceive.text = "read error"; |
} |
} |
? |
? |
|
|
|
private function SendCtrlAppli() { |
|
var mySendMessage:String = |
"フラッシュからコマンド送信 : 回数 ==> " + m_Count.toString(); |
? |
|
fscommand( "FlashNotify", mySendMessage ); |
? |
|
m_Count++; |
trace("send : " + mySendMessage ); |
} |
} |
} |
|
VB.NET側のソース
◆コマンドの送信
値は.FlashVarsに"変数名"="値"で設定してやれば渡せます。
また複数渡したい場合は以下のように&で区切れば渡せます。
xxx.FlashVars = "変数名A" + "=" + "パラメータ" + "&" + "変数名B" + "=" + "パラメータ"
◆コマンドの受信
xxx_FSCommandイベントハンドラにて文字列としてコマンドを受信できます。
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. |
44. |
45. |
46. |
|
Option Strict On |
Option Explicit On |
? |
Public Class frmMain |
? |
|
|
|
|
|
Private Sub AxShockwaveFlash1_FSCommand(ByVal sender As Object, ByVal e As _ |
AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent) _ |
Handles AxShockwaveFlash1.FSCommand |
txtReceive.Text = "command:" + e.command + ", " |
txtReceive.Text += "param:" + e.args |
End Sub |
? |
? |
|
|
|
|
|
Private Sub btnLoad_Click(ByVal sender As System.Object, _ |
ByVal e As System.EventArgs) Handles btnLoad.Click |
|
Dim myDialog As System.Windows.Forms.OpenFileDialog = _ |
New System.Windows.Forms.OpenFileDialog |
? |
|
myDialog.Filter = "Flashファイル(*.swf)|*.swf" |
myDialog.Title = "Flashファイルを選択して下さい" |
? |
|
If myDialog.ShowDialog(Me) <> Windows.Forms.DialogResult.OK Then Return |
? |
|
|
AxShockwaveFlash1.FlashVars = "ApplNotify=aiueo" + txtPara1.Text _ |
+ "&ApplTest=" + txtPara2.Text |
? |
? |
|
AxShockwaveFlash1.LoadMovie(0, myDialog.FileName) |
End Sub |
End Class |
|
注意事項
Flashの.LoadMovie()メソッドは、無効なファイル名が入力されたり、
読み込んでいるファイルが指定された場合何もおきないようです。
よってこのサンプルの[Flashをロード]ボタンで同じファイルを読み込んでも値が反映されません。
応用したサンプル
フラッシュ側でMCの位置を編集し、それをVB.NET側で保持するようにしてみました。
サンプルのダウンロード
Coercaneumuro