通過ASP和其他程序動態生成HTML頁面似乎不再是最新的技術,HTML頁面可以使用ASP動態生成,Flash動畫也可以使用支持COM自動化的語言動態生成,錯新技術頻道小編詳解ASP生成動態flash的工具與介紹。
一、概述?
筆者應用?Microsoft?Visual?C++?中的?ATL?,將?SWF?SDK?中的高級類封裝成了?COM?Objects?,以便使更多的支持COM?Automation的編程語言能夠生成?Flash?動畫。這些?COM?Objects?被命名為 ?Bukoo?Flash?Objects?。本文不是描述?Bukoo?Flash?Objects?的開發方法和過程,而是介紹如何使用它。?
二、下載安裝?
Bukoo?Flash?Objects?可以在以下網址下載:? http://www.delphibbs.com/bukoo ?或者?http://www.geocities.com/yiyisun/bukoo ?。下載的文件為?Swfobjs.zip?,解壓后除了文檔和范例,?Bukoo?Flash?Objects?就在?swfobjs.dll?中,使用?regsvr32?swfobjs.dll?安裝?Bukoo?Flash?Objects?;使用 ?Regsvr32?/Uswfobjs.dll?卸除?Bukoo?Flash?Objects?。?
三、基本對象及其屬性?
Bukoo?Flash?Objects?總共包括三個?COM?Objects?:?SwfMovie?、?SwfObject?和?SwfAction?。?
通過創建這三個對象來生成?Flash?動畫的過程是:創建?SwfMovie?動畫對象;設置動畫屬性;在幀中創建、插入、刪除?SwfObject?元素對象和?SwfAction?動作對象;最后輸出?Flash?動畫。? 下面是這三個對象應用方法介紹。?
1?.SwfMovie?動畫對象?
SwfMovie?對象代表即將生成的?Flash?動畫,首先需要設置的是動畫的大小,?SwfMovie?對象的?SetSize?方法用于設置動畫的尺寸。要注意Swf中坐標單位是?twip?,即?1/1440?英寸,或者說是?1/20?像素,例如動畫尺寸為?400?x?300?像素,即為 ?8000?x?6000?twip?。必須這樣調用:?setsize(8000,?6000)?。?
setFrameRate (12)?,就是動畫每秒放?12?幀,每秒幀速高,動畫平滑,但是?Swf文件會變大,影響下載速度,故需要權衡利弊。用?GotoFrame?方法定位到指定幀,然后插入元素或者動作,?SwfMovie?對象自動增加幀數到調用?GotoFrame?方法的最大數目。?
插入和刪除元素的方法是?AddObject?,?RemoveObject?,插入動作的方法是?AddAction?。?
WriteMovie?方法就是按照指定的文件名生成?sWF?文件。?SwfMovie?的?Content?屬性是?VARIANT?類型,也可以用?AsP?中的?response.binarywite?輸出到網頁中。?
2?.?SwfObject?元素對象?
SwfObject?像是一個千面人,創建這個對象以后,可以用其?MakePolygon?方法使其變成多邊形;用?MakeRectangle?方法變成矩形;用?MakeOval?方法變成橢圓形;用?MakeCircle?方法變成圓形;用?MakePitcure?方法變成?Jpeg?圖像;用?MakeButton?方法變成按鈕;用?Makesound?方法變成聲音;用?MakeFont?方法變成字體;用?MakeText?方法變成文字等等。sWF?中的文字處理比較特殊,需要先將?TrueType?字體轉換成字體對象,再用字體對象生成文字。?
SwfObject?的?Translate?方法用于平移元素,坐標定位?twip?;?Rotate?方法用于旋轉元素;?scale?用于縮放元素。注意旋轉和縮放方法的參數單位也比較特殊,稱為?Fixed?,簡單的換算方法是乘以?65536?,例如旋轉?10?度,需要用?10× 65536?,放大?2倍,需要用?2×65536?,依次類推。? SwfObject?的?setLineWidth?方法用于設置對象邊框線的寬度,單位?twip?;?setLineColorA?方法用于設置對象邊框線的顏色,它有四個參數,分別代表紅、綠、藍和?Alpha?。Alpha? 參數規定顏色的透明程度。?Alpha=255?不透明,完全覆蓋下面的圖形;?Alpha=0?全透明,讓下面的圖形全部透出來,自己就看不見了。?
SwfObject?的?setNoFill?方法用于設置對象不填充,?setsolidFill?用于設置對象用單色填充,也可以用?alpha? 規定透明程度。?setLinearFill?方法用于設置對象從一個顏色到另外一個顏色逐漸線性過渡,?setLinearFillCenter?方法用于設置顏色線性過渡的中心點。setRadialFill?方法用于設置對象從一個顏色到另外一個顏色放射性逐漸過渡。 ?setRadialFillCenter?方法用于設置顏色放射性過渡的中心點。? SwfObject?變成按鈕的方法的過程稍微復雜些,因為按鈕需要四個圖形,分別代表按鈕普通狀態、鼠標劃過狀態、鼠標下落狀態和提示狀態的圖形。按鈕被按動后將激發的動作,需要用?QueueEvent?方法加入動作對象。?
3?.?SwfAction?動作對象?
目前,?Bukoo?Flash?Objects?支持五個動作:停止動畫、播放動畫、跳轉到某個幀、導航到?URL?,以及在使某個?html?frame?導航到?URL?。與?SwfObject?一樣, ?SwfAction?對象創建后,可以用?MakeActionstop?、?MakeActionPlay?、 ?MakeActionGotoFrame?、?MakeActionGotoURL?以及?MakeActionGotoURLTarget?變成相應的動作。?
四、?ASP?范例?
這個?ASP?程序(?sample1.asp?)將動態創建?Flash?動畫,包含放射性填充背景、一個自右向左移動的文字和三個擴張的圓形,Swf文件將以二進制流的方式被寫入到瀏覽器中。?sample1.asp源代碼。?
如果需要將動態生成的?Flash?動畫插入其他網頁,可以用參照?dispswf.asp?來做。?
兩個?ASP?配合使用的?URL?為:?
http://localhost/swf/dispswf.asp?swf_url=sample1.asp&width=300&height=50 ?
五、進一步討論?
通過?COM?技術,?Bukoo?Flash?Objects?在VC++的SWF?SDK和VC++?以外的其它程序設計語言或者環境之間架設了橋梁,使得利用?ASP?、Delphi?和其他語言能夠很方便地生成Flash?動畫。?
但是,SWF?SDK?中包含了許多錯誤?(bug)?,下載和使用SWF?SDK?的讀者需要特別注意,例如,沒有將?TrueType?字體轉換為 ?Flash?字體的功能、對象的幾何變換公式是錯誤的等等。這些問題在?openswf.org?和?flashkit.com?的討論組中有很多討論。筆者在制作?Bukoo?Flash?Objects?時,已經盡量改了一批類似的缺陷和錯誤。估計難免還有遺漏之處,這將大大影響 ?Bukoo?Flash?Objects?的質量。隨著?Flash?5?的正式發布,預計SWF?5?的SDK不久也會推出,希望它能修正其中的 ?bug。屆時,筆者將用新的?SDK?重新編譯?Bukoo?Flash?Objects?。?
下一個版本的?Bukoo?Flash?Objects?計劃將增加對中文、對嵌入動畫?(sprite)?和對變形?(morph)?的支持。?
歡迎讀者對?Bukoo?Flash?Objects?提出建議和批評。
新聞熱點
疑難解答