前提:引用以下两个dll
AxInterop.ShockwaveFlashObjects.dll
Interop.ShockwaveFlashObjects.dll
假如没有,可以到flash官方下载。
以上两个dll,除包含和c#本例要的的类和方法外,也已经继承了flash播放器了。
下面开始,介绍:
1> 定义一个private AxShockwaveFlashObjects.AxShockwaveFlash axShockwaveFlash1;
并加载某一flash,比如 test.swf,(推荐直接从面板中拖出flash,然后设置相关属性)
this.axShockwaveFlash1.LoadMovie(0, “test.swf”);
2> 实现从flash 传递一些信息到C# 内部:
主要是为flash的一些original event 加一些c# function,例如:
this.axShockwaveFlash1.FSCommand +=new AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEventHandler(axShockwaveFlash1_FSCommand)
这里的FSCommand是flash本身的一个事件,这里给他加上一个函数axShockwaveFlash1_FSCommand
private void axShockwaveFlash1_FSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e)
{
// We only want to react if we got our command
if (e.command == "flashMessage")
{
this.richTextBox1.AppendText(e.args + "/n");
}
}
3> 实现从C#内部传递信息给flash,直接调用flash的一个函数就可以了。
this.axShockwaveFlash1.SetVariable("CSharpMessage", "Hi Flash!");
要实现上面的功能,还必须在flash里面写代码
/////////////////////////////////////////////////////////////////
// C-Sharp-Message-Broadcaster
// bcCSharpMessage,onCSharpMessage,CSharpMessage不是系统自带的
/////////////////////////////////////////////////////////////////
_root.bcCSharpMessage = function (varName, oldVal, newVal)
{
arguments.callee.broadcastMessage("onCSharpMessage", newVal);
}
ASBroadcaster.initialize(_root.bcCSharpMessage);
_root.onLoad = function ()
{
this.CSharpMessage = null;
this.watch("CSharpMessage", this.bcCSharpMessage);
// 这里的"CSharpMessage" 是dll里面SetVariable("CSharpMessage", "Hi Flash!");
}
/////////////////////////////////////////////////////////////////
// Test
/////////////////////////////////////////////////////////////////
// Receive from C-Sharp
obj = new Object();
obj.onCSharpMessage = function (strMessage)
{
_root.flashoutput_txt.text += strMessage + "/n";
}
_root.bcCSharpMessage.addListener(obj);
// Send to C-Sharp
_root.buttonSend_mc.onRelease = function ()
{
fscommand("flashMessage", "Hi C-Sharp");
//fscommand 可以给c#接收
}