王德東,楊永華,盧 暢
(浙江海洋學(xué)院公共實(shí)驗(yàn)中心,浙江舟山 316004)
Flash是Macromedia公司(現(xiàn)已被Adobe公司收購)開發(fā)的一款矢量動(dòng)畫創(chuàng)作工具,主要用來創(chuàng)建二維動(dòng)畫,也可以用它來創(chuàng)建幻燈片演示文稿、表單應(yīng)用程序以及通過腳本程序來建立人機(jī)交互的內(nèi)容。Flash可以包含文字、圖形、圖片、聲音以及視頻文件,由于是矢量格式,文件體積很小,很適合應(yīng)用在網(wǎng)絡(luò)廣告、在線游戲以及網(wǎng)絡(luò)多媒體教程等領(lǐng)域,其精簡版Flash Lite在手機(jī)方面的應(yīng)用也日漸豐富起來[1]。目前,各個(gè)高校大都開設(shè)了Flash軟件選修課程,由于選修此類課程的學(xué)生人數(shù)往往比較多,教師批改作業(yè)及閱卷工作量都很大,因此設(shè)計(jì)一個(gè)計(jì)算機(jī)自動(dòng)測評系統(tǒng)就顯得很有必要。
對真實(shí)環(huán)境下產(chǎn)生的Flash文件進(jìn)行計(jì)算機(jī)自動(dòng)閱卷,可以考慮三種方案:一是分析SWF文件格式以逆向工程的方式進(jìn)行,二是利用數(shù)字圖像處理[2]及模式識(shí)別的方法[3],三是在Flash設(shè)計(jì)環(huán)境下通過運(yùn)行JSFL腳本來對FLA文件進(jìn)行模糊批閱。第一種方法不僅工作量巨大,而且由于商業(yè)因素,不可能完全逆向分析。第二種方法需要將Flash的每一幀截圖存為BMP或JPEG格式,然后進(jìn)行識(shí)別,效率太低。第三種方法,有點(diǎn)類似于MS OFFICE中的VBA的閱卷方式,利用腳本語言讀取對象的屬性和標(biāo)準(zhǔn)答案比對,從而實(shí)現(xiàn)快速閱卷。這種方法開發(fā)難度低,效率高,可以大大縮短開發(fā)周期。
Flash提供了兩種形式的腳本,一種是編譯后的SWF文件運(yùn)行時(shí)在Adobe Flash Player中執(zhí)行的腳本,即AS(Action Script)。另一種即我們要討論的Flash JavaScript API(簡稱JSAPI),它是Flash提供的應(yīng)用程序編程接口,運(yùn)行在Flash編輯環(huán)境中,用于擴(kuò)展Flash IDE運(yùn)行時(shí)的功能,其對應(yīng)的腳本語言即JSFL。利用JSFL可以設(shè)置對象的屬性,自動(dòng)執(zhí)行重復(fù)性任務(wù),提高創(chuàng)作效率。同時(shí),也可以利用它讀取對象的屬性來達(dá)到閱卷的目的。
Flash JavaScript API基于文檔對象模型(DOM),該模型允許使用JavaScript對象訪問Flash文檔。DOM包含一組頂級(jí)函數(shù)和兩個(gè)頂級(jí)對象FLfile對象和flash對象。FLfile對象用于對本地文件系統(tǒng)中的文件和文件夾進(jìn)行操作,fl.documents代表當(dāng)前打開的Flash文件數(shù)組。例如fl.documents[0]代表第一個(gè)打開的FLA文檔,而通過fl.getDocumentDOM().library.items[0],則可以獲得庫中第一個(gè)元素的引用。每個(gè)Document對象由子對象和屬性組成。DOM對象模型見圖1。
圖1 FLASH文檔對象模型(DOM)Fig.1 Flash document object model(DOM)
主要測試內(nèi)容有:文檔屬性;時(shí)間軸、圖層、幀等屬性及操作;動(dòng)畫類型;庫、元件、位圖、聲音、視頻等屬性;靜態(tài)文本、濾鏡屬性;筆觸、顏色、填充操作;規(guī)則圖形(直線、圓、橢圓及多邊形)繪制操作;不規(guī)則圖形操作等。
這里的文檔就是指舞臺(tái),是演員表演的場所。在一個(gè)FLASH動(dòng)畫中,舞臺(tái)的大小和幀頻都是一樣的,要想調(diào)整某一段動(dòng)畫的播放速度,可以通過增加或減少幀的方法來解決。
fl.getDocumentDOM().width 和 fl.getDocumentDOM().height 可以返回舞臺(tái)的寬度及高度;fl.getDocumentDOM().backgroundColor返回舞臺(tái)的背景顏色,格式為"#RRGGBB"的字符串,例如返回值為"0000FF"代表藍(lán)色。document.frameRate它指定播放動(dòng)畫播放的速度,默認(rèn)值為每秒12幀,其取值范圍為0.01~120之間。通過getMetadata返回文檔的標(biāo)題及其描述性文字,這樣GOOGLE等搜索引擎就可以對其進(jìn)行索引。調(diào)用getMetadata函數(shù)后自動(dòng)產(chǎn)生XML文件,讀取它即可獲得文檔的“標(biāo)題”及“描述”2個(gè)屬性。
圖2 設(shè)置文檔(舞臺(tái))屬性Fig.2 Set up parameters of the document(stage)
4.2.1 場景(scene)及時(shí)間軸對象的主要屬性
一場戲劇可以分為很多幕,這個(gè)“幕”就可以理解為場景,也可以理解為一本書中的一個(gè)章節(jié)。復(fù)雜的動(dòng)畫往往分為多個(gè)場景,便于設(shè)計(jì)及管理。演員、音響、背景等各種因素需要按照事先安排好的次序及時(shí)間來進(jìn)行演出,這個(gè)總調(diào)度是由時(shí)間軸來完成的。主要屬性有,timeline.name:場景(時(shí)間軸)名稱;timeline.currentLayer:當(dāng)前活動(dòng)圖層的編號(hào);timeline.layerCount:圖層總數(shù);timeline.layers :圖層對象數(shù)組。
4.2.2 圖層(layer)對象的主要屬性
圖層可以看成是拍攝用的膠片,每層膠片是透明的,多個(gè)圖層按次序垂直排列。處于上面圖層中的對象會(huì)遮住下層相同位置的對象。圖層的主要屬性有,layer.color:圖層輪廓顏色;layer.frameCount:圖層幀數(shù);layer.frames:幀對象數(shù)組;layer.height:以百分比表示的圖層高度;layer.layerType:圖層類型;layer.parentLayer:圖層包含的文件夾、引導(dǎo)圖層或遮罩圖層。layer.locked:圖層的鎖定狀態(tài);layer.name:圖層的名稱;layer.visible:圖層是否被掩藏。
4.2.3 幀(frame)對象的主要屬性
“幀”是時(shí)間軸上的一個(gè)小格,是舞臺(tái)內(nèi)容中的一個(gè)片斷,多個(gè)幀按照一定速度播放就形成了動(dòng)畫。主要屬性有,frame.name:幀名稱;timeline.currentFrame:當(dāng)前幀編號(hào);frame.actionScript:ActionScript 代碼;frame.duration:幀的數(shù)量;frame.tweenType:補(bǔ)間的類型;frame.tweenEasing:補(bǔ)間對象的緩動(dòng)數(shù)量;frame.labelType:幀名稱的類型,分為名稱、注釋、錨記三種;frame.motionTweenOrientToPath:動(dòng)畫運(yùn)動(dòng)時(shí)是否旋,其中,motionTweenRotate說明旋轉(zhuǎn)方向(順時(shí)針或逆時(shí)針),motionTweenRotateTimes代表定補(bǔ)間元素在起始關(guān)鍵幀和下一關(guān)鍵幀之間旋轉(zhuǎn)的次數(shù);frame.motionTweenScale:對象移動(dòng)時(shí)是否縮放,motionTweenSnap表示是否對齊到路徑,motionTweenSync表示對象運(yùn)動(dòng)時(shí)是否和時(shí)間軸同步。另外還有聲音名稱,播放方式及次數(shù)等屬性。
元素是一個(gè)統(tǒng)稱,在舞臺(tái)上輸入的文本、繪制的圖形、導(dǎo)入的位圖等都是元素,element.elementType表示元素的類型,有常用的有三種:"shape"、"text"、"instance"。Shpae對象是形狀對象。Instance 是庫項(xiàng)目的實(shí)例,對于位圖,通過instanceType屬性返回“bitmap”來判斷,然后通過getBits函數(shù)來測試其高度、寬度和顏色位數(shù)。文本類型分為靜態(tài)、動(dòng)態(tài)及輸入三種,本系統(tǒng)著重測試靜態(tài)(static)文本。通過getTextAttr函數(shù)來測試字體名稱、顏色、大小、加粗、斜體、對齊方式等項(xiàng)目。濾鏡的概念是自FLASH8.0以后增加的,類似于PHOTOSHOP的濾鏡,用于增強(qiáng)位圖、文本、元件實(shí)例的效果。用getFilters函數(shù)可以獲得濾鏡對象,進(jìn)而獲得其它的相應(yīng)屬性。
庫(library)對象相當(dāng)于一模板,包含元件(Symbol)、位圖、聲音和視頻。元件的類型分為 "movie clip"、"button"和"graphic",分別代表“影片剪輯”、“按鈕”及“圖形”。對于反復(fù)使用的元素,盡可能設(shè)計(jì)為元件,便于管理并能減少文件體積。通過getItemType屬性可以獲得其類型,通過getItemProperty函數(shù)獲取所選項(xiàng)目的屬性。
getCustomStroke()返回筆觸對象。stroke.capType,指定筆觸端類型的字符串??山邮艿闹禐?"none"、"round"和 "square";stroke.thickness 返回筆觸高度;stroke.color返回筆觸顏色。通過 getCustomFill()獲得取所選內(nèi)容的填充對象,然后通過 fill.style、fill.color、fill.colorArray、fill.posArrayt等來返回填充類型、顏色、漸變及位置等屬性。
對于標(biāo)準(zhǔn)的矢量圖形的識(shí)別,例如直線、圓、橢圓、三角形、矩形、多邊形、星形等,可以統(tǒng)一采用模糊判斷方法。即在題目里明確規(guī)定形狀的高度、寬度以及X、Y的坐標(biāo),這樣便于閱卷。Flash編輯環(huán)境中元素的坐標(biāo)位置見圖3及圖4。通過程序獲取其邊界點(diǎn)(參考6.1小節(jié)里的 getEgePoint()函數(shù)),然后和知識(shí)庫里的標(biāo)準(zhǔn)點(diǎn)比對,只要存在這些點(diǎn)(允許一定的誤差)就認(rèn)為操作是正確的。
對于不規(guī)則區(qū)域的識(shí)別相對比較復(fù)雜,不規(guī)則區(qū)域是由貝塞爾曲線組成的。在獲取了邊界點(diǎn)后,利用貝塞爾曲線公式,根據(jù)統(tǒng)計(jì)方法進(jìn)行判斷[4]。
圖3 屬性設(shè)置面板Fig.3 Panel of parameter setting-up
圖4 圓的坐標(biāo)點(diǎn)分配示意圖Fig.4 Map of distribution of circle points on the coordinate
閱卷系統(tǒng)可以采取兩種方式給出成績:一是在JSFL文件里輸出各種對象的屬性值,并保存為文本文件,然后利用其它高級(jí)語言(例如VB)來讀取這個(gè)文件和標(biāo)準(zhǔn)答案比對;另一種方法是利用JSFL直接評分,并將分?jǐn)?shù)寫在文件里,然后利用VB來讀取這個(gè)分?jǐn)?shù)。前者比較靈活,可以結(jié)合數(shù)據(jù)庫做成通用的系統(tǒng),后者則可以設(shè)計(jì)一些比較復(fù)雜的題目,閱卷效率比較高。示例1采用了第一種方法,示例2則采取了第二種方法。另外,為了節(jié)約篇幅,程序中略去了錯(cuò)誤處理代碼,具體閱卷時(shí),需要詳細(xì)考慮容錯(cuò)問題,例如考生沒有全部完成題目,此時(shí)JSFL代碼可能得不到正確的結(jié)果,可以使用try…catch(error)…finnaly以及使用if語句來處理。
繪制 1個(gè)圓,半徑為 60,位置(X、Y)為(100,100)。筆觸顏色為為紅色,高度為4,用放射狀顏色填充,顏色點(diǎn)位置大概為(0,255),顏色分別為藍(lán)色、白色。見圖5。
圖5 閱卷示例1Fig.5 Example 1 of Assessment
關(guān)鍵閱卷代碼及分析:
表1 score1.txt文件的內(nèi)容Tab.1 Content of the file score1.txt
表1所示的內(nèi)容,用VB打開該文件,使用Instr()等函數(shù)就可以進(jìn)行閱卷,只要判斷存在第1行的數(shù)據(jù),就可以認(rèn)為正確繪制了一個(gè)圓。然后判斷第2、3行的內(nèi)容,和標(biāo)準(zhǔn)答案比較即可給出分?jǐn)?shù)。
新建1個(gè)FLA文件,將圖層1命名為“背景”,導(dǎo)入素材“乒乓桌.jpg”到舞臺(tái)上,將其設(shè)置為背景。新建1個(gè)元件“乒乓球”,類型為“影片剪輯”。新建1個(gè)圖層,命名為“乒乓球”,將“乒乓球”元件拖到主舞臺(tái)中,從第1幀到第10幀建立補(bǔ)間動(dòng)畫,見圖6。
圖6 閱卷示例2Fig.6 Example 2 of assessment
關(guān)鍵閱卷代碼:
Flash操作題目閱卷系統(tǒng)分為兩個(gè)部分:出題系統(tǒng)及閱卷系統(tǒng),主程序及控制部分用VB開發(fā),F(xiàn)lash對象屬性的獲得通過JSFL來獲取。系統(tǒng)框架圖見圖7。在VB中結(jié)合ADO來操作數(shù)據(jù)庫[5],出題時(shí)用JSFL讀取FLA文件對象的各種屬性并寫入數(shù)據(jù)庫。閱卷時(shí),再次利用JSFL獲得對象的屬性,進(jìn)行比對,給出成績并寫入數(shù)據(jù)庫。閱卷的JSFL文件以及VB閱卷腳本保存在數(shù)據(jù)庫里,可以動(dòng)態(tài)增加修改,因此本系統(tǒng)具有靈活的可擴(kuò)展性。
圖7 閱卷系統(tǒng)框架圖Fig.7 The framework of the assessment system
VB關(guān)鍵代碼:
對于Flash軟件的考核,主要是測試學(xué)生對基本工具掌握的情況等,通過實(shí)例可以看出,該測試方法完全可行,結(jié)合在線理論測試系統(tǒng)及CAI輔助學(xué)習(xí)系統(tǒng),可以大大減少教師的工作量,提高學(xué)生的學(xué)習(xí)興趣及積極性,提高了閱卷的公正性。本系統(tǒng)在我校的Flash公選課程里試用,取得了不錯(cuò)的效果。下一步打算將其做成COM插件[6]的形式運(yùn)行于IE瀏覽器里,這樣整個(gè)系統(tǒng)都是基于B/S結(jié)構(gòu),方便了系統(tǒng)的使用及更新。
[1]張 震.中文Flash8動(dòng)畫網(wǎng)頁制作與實(shí)例教程[M].北京:冶金工業(yè)出版社,2006.
[2]孫家廣.計(jì)算機(jī)圖形學(xué)[M].北京:清華大學(xué)出版社,2002.
[3]張新峰,沈蘭蓀.模式識(shí)別及其在圖像處理中的應(yīng)用[J].測控技術(shù),2004,23(5):28-32.
[4]徐文勝.真實(shí)環(huán)境下FLASH自動(dòng)測評系統(tǒng)[J].農(nóng)機(jī)化研究,2004(1):227-229.
[5]魯佩云.ADO對象模型和用VB實(shí)現(xiàn)其應(yīng)用的兩種方式[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(7):1 947-1 949.
[6]游慶祥,姚世軍,韓 強(qiáng).一種基于接口匹配的構(gòu)件庫設(shè)計(jì)[J].微計(jì)算機(jī)信息:管控一體化,2006,22(9273):269-271.