电竞比分网-中国电竞赛事及体育赛事平台

分享

【轉(zhuǎn)】C#與FLASH的完美結(jié)合

 昵稱9841599 2012-09-27
2012-05-09 19:10

【轉(zhuǎn)】C#與FLASH的完美結(jié)合

用Microsoft Visual Studio 2008新建一個工程,在工具箱上單擊右鍵,選擇“添加選項卡”,然后打入“FLASH”字樣,再在新的選項卡上單擊右鍵,選擇"添加/移除項",在com組件列表中選擇Shockwave Flash Object,然后確定,


(注意,這里不要選擇添加Macromedia Flash Factory Object控件,雖然它們的DLL文件都是指向同一文件),



加載Shockwave Flash Object控件到FLASH工具箱。
點擊“Shockwave Flash Object”控件,在Form1窗體拉出一個FLASH容器,并調(diào)整好大小,默認拉出來的FLASH容器名字叫“axShockwaveFlash1”,這時它只是一個容器,顯示出一片空白,我們可以設(shè)置它的SWF文件路徑,使用Movie屬性,假如你的D盤有個叫HS.swf的FLASH文件,你可以在Movie屬性填寫“D:\HS.swf”,這時,窗口應(yīng)該馬上顯示HS.swf的預(yù)覽,按下F5就可以正常加載此文件了。

如果你希望以編程方式動態(tài)加載SWF文件,請參考以下代碼:
在Form_Load()中加入如下代碼
axShockwaveFlash1.Movie =@"D:\Sex.swf"; //請?zhí)顚懡^對地址
axShockwaveFlash1.Menu = false;         //關(guān)閉Flash動畫右鍵菜單(還是會有“關(guān)于”選項)
axShockwaveFlash1.Playing = true;       //是否讓動畫播放
如果希望讓SWF文件與C#進行互動,請參考以下代碼:
------------------------AS2.0代碼-----------------------
在FLASH CS 新建一FLA8文件,拖一個按鈕進來,并設(shè)置其按鈕的AS代碼
on (release) {
     fscommand ("Hello,World!!");
}
然后,再拖一個"文本框"控件進來,重命名為“txt_Mess”,最后設(shè)置該幀的幀AS代碼:
import flash.external.*;//向C#發(fā)送數(shù)據(jù)
ExternalInterface.call ("test", "str", Math.random ());//接受C#發(fā)來的數(shù)據(jù)
ExternalInterface.addCallback ("c2flash", null, c2flash);
function c2flash (Ms:String)
{
     txt_Mess.text = Ms;
}
好了,生成SWF文件,文件名:HS.swf 記得生成到D:\根目錄下
-------------------------AS2.0代碼結(jié)束-------------------
------------------------C#3.5代碼-----------------------
在Visual Studio的Form1窗體,由于剛才已拉出一個FLASH控件axShockwaveFlash1,其Movie屬性已填寫為“D:\HS.swf”,現(xiàn)在只要切換到該控件的“事件”屬性,在其的FSCommand事件雙擊,并添加如下代碼
if(e.command == "Hello,World!!")
{
     MessageBox.Show("SWF說:"+e.command.ToString()) ;
}
返回Form1窗體,拖一個按鈕進來,雙擊它添加單擊事件,代碼如下:
private void button1_Click(object sender, EventArgs e)
{    
     callFunction("c2flash",this.textBox1.Text);//向Flash發(fā)送數(shù)據(jù)
}
然后再添加以下C#3.5代碼:
void flash_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
{
     string s = nodeXml(e.request.ToString())[0].ChildNodes[0].InnerText.ToString();
     //接受Flash傳來的值
     this.textBox1.Text = s;
     throw new Exception("The method or operation is not implemented.");    
}
private void callFunction(string funName,string arg)
{
     //C#傳給Flash的值
     flash.CallFunction("<invoke name=\"" + funName + "\" returntype=\"xml\"><arguments><string>"+arg+"</string></arguments></invoke>");
}
private XmlNodeList nodeXml(string s)
{
     XmlDocument doc = new XmlDocument();
     doc.LoadXml(s);
     XmlNodeList list = doc.GetElementsByTagName("arguments");
     return list;
}
然后再修改一下Load代碼:
private void Form1_Load(object sender, EventArgs e)
{
flash.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(flash_FlashCall);
}
------------------------C#3.5代碼結(jié)束-----------------------
按下F5測試!
花生注:如果使用Shockwave Flash Object控件的時候提示:未能導(dǎo)入 Activex控件,請確保它已正確注冊!
解決方法:
開始--運行--regsvr32 c:\windows\system32\macromed\flash\flash10b.ocx
(flash10b.ocx是在你機器的FLASH版本,根據(jù)你的版本不同而不同,可能會是flash9f.ocx或flash11c.ocx)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多