項 潔,姜華強,周燕君
(杭州師范大學杭州國際服務工程學院,浙江 杭州 310012)
基于JSFL的Flash作品自動評價技術
項 潔,姜華強,周燕君
(杭州師范大學杭州國際服務工程學院,浙江 杭州 310012)
文章介紹了使用JSFL腳本實現(xiàn)Flash作品自動評價的技術,并就評價過程中提高文檔識別率提出了間接分析、實例采樣、正則表達式等方法.實踐證明,此類技術方法的使用,不僅簡化了Flash作品自動評價的實現(xiàn)過程,還提高了作品評價的準確性,具有一定的實際應用價值.
Flash;JSFL;Flash DOM;自動評價
隨著多媒體技術的發(fā)展,多媒體技術的教育也逐漸成為國內(nèi)外教學的主要內(nèi)容.Flash作為集向量繪圖、動畫制作、多媒體動畫三大功能于一體的網(wǎng)絡動畫制作軟件,因其文件小、傳輸快、多媒體、交互性強等特性,正被廣泛應用于美術設計、網(wǎng)頁制作、多媒體軟件以及教學課件制作等多個領域,其在多媒體技術的教育中也占了一席重要之地.
與傳統(tǒng)的計算機應用技術課類似,以Flash為代表的多媒體技術課也是一門強調(diào)實踐應用的課程,同時它又兼具對作品的藝術性要求,因此如何盡可能避免作品評價過程中的主觀性,對學生的Flash作品進行公正、合理、高效的評價是多媒體教學及計算機自動評價領域亟待解決的問題.
目前,對于Flash作品進行計算機自動評價,主要有3種方案:一種是分析SWF文件格式以逆向工程的方式進行,一種是利用數(shù)字圖像處理及模式識別的方法,另一種是在Flash設計環(huán)境下通過運行JSFL腳本來對FLA文件進行模糊批閱.第一種方法不僅工作量巨大,而且由于商業(yè)因素,不可能完全逆向;第二種方法需要將Flash的每一幀截圖存為BMP或JPEG格式,然后進行識別,效率太低;第三種方法,即利用JSFL腳本讀取Flash對象的屬性和標準答案比對,從而實現(xiàn)快速閱卷.這種方法開發(fā)難度低、效率高,可以大大縮短開發(fā)周期[1].在此將第三種方法的實現(xiàn)及其在Flash作品評價過程中提高文檔識別率的幾種方法進行闡述.
Flash提供了兩種形式的腳本,一種是編譯后的SWF文件運行在Adobe Flash Player中執(zhí)行的腳本,即AS(Action Script).另一種即在Flash作品評價中要用到的JSAPI(Java Script Application Programming Interface),它是Flash提供的基于Flash文檔對象模型(DOM)的應用程序編程接口,運行在Flash編輯環(huán)境中,允許用戶以對象訪問的方式對Flash文檔進行編程開發(fā),其對應的腳本語言即JSFL.利用JSFL可以設置對象的屬性,自動執(zhí)行重復性任務,提高創(chuàng)作效率[1].
JSFL腳本最大的特點是簡單易學,一方面它與AS類似,關鍵字、語法、結構都是統(tǒng)一遵循ECMA Script標準,有AS經(jīng)驗的開發(fā)者對于JSFL極易上手;另一方面,F(xiàn)lash自帶的歷史記錄提供了很好的智能輔助,基于UI的操作在歷史記錄中都能找到相應JSFL腳本.換言之,在用JSFL腳本進行編程開發(fā)的時候,常用的基本命令可以通過可視化界面來完成,然后在其生成的代碼中插入自定義的控制語句即可快速生成新的應用擴展.
JSFL腳本文件是以.jsfl為擴展名的jsfl命令集合,可用Flash或其他文本編輯器來編寫,生成的文件存儲于flash的Commands文件夾中即可被flash識別并用于功能擴展.對于不同版本的flash,其對應的Commands目錄所在的路徑略有不同,如Flash 8版本的Commands路徑為C:Documents and Settings用戶Local SettingsApplication DataMacromediaFlash 8語言ConfigurationCommands而Flash CS3對應的Commands路徑為C:Documents and Settings用戶Local SettingsApplication DataAdobeFlash CS3語言ConfigurationCommands,具體可參見聯(lián)機幫助.
2.1 Flash DOM
圖1 Flas8.0 DOM摘要Fig. 1 Abstract of Flas8.0 DOM
Flash DOM即Flash文檔對象模型,包含了一組頂級函數(shù),并以對象樹的形式提供了Flash文檔元素的訪問接口,如圖1所示.
其中flash對象是整個DOM的頂層對象,代表flash應用程序,腳本代碼中用flash或fl來表示.Document為flash的子對象,表示文檔.每個Document對象代表了flash文件包含的大部分元素,所以DOM里很大一部分是Document對象的子對象和屬性.可以通過頂級flash對象的documents屬性得到一個已經(jīng)打開的文檔數(shù)組,使用fl.documents[index]來得到指定的文檔,使用fl.getDocumentDOM()獲取當前文檔.對于Document的子對象,可以通過其相應的屬性得到,比如Document對象的屬性library幫助得到library子對象,代碼如下:fl.getDocumentDOM().library.
Timeline對象表示flash里面的時間軸,用于組織和控制文檔內(nèi)容在一定時間內(nèi)播放的圖層數(shù)和幀數(shù),是flash文件的重要元素.其下包含圖層對象(Layer)和幀對象(Frame).可通過使用Document對象的getTimeline()方法或timelines數(shù)組獲取時間軸對象.如假設當前時間軸為文檔中的第一個時間軸,則可用fl.getDocumentDOM().getTimeline()或fl.getDocumentDOM().timelines[0]兩種方法之一獲取當前時間軸.
Frame對象是flash文件中另一個重要對象,表示圖層中的幀.
Element對象,即元素對象,出現(xiàn)在舞臺上所有對象都是Element類型,該對象存在Instance子類,表示實例化的元素;Text子類,表示文檔中單獨的文本項;Shape子類,用于在舞臺上操作或創(chuàng)建幾何形狀.
library對象,對應于flash的“庫”面板,用于存儲和組織在Flash中創(chuàng)建的各種元件及位圖文件、圖形文件和視頻.其下屬的Item對象是一種抽象基類,派生出的BitmapItem對象、folderItem對象、fontItem對象、SoundItem對象、SymbolItem對象、VideoItem對象分別表示庫里的位圖、文件夾、文字、聲音、元件和視頻.
2.2 基于DOM的文檔訪問
使用DOM技術對flash文檔進行訪問,即使用JSFL腳本語言根據(jù)文檔對象樹的層次關系,通過遍歷查找訪問文檔元素及相應的屬性.如需要獲取當前時間軸上圖層1所有幀中名稱為“玫瑰”的元件,可用以下遍歷語句來完成.
var curLayer,frameArray,curFrame,elts,i,j,t;
var tl=fl.getDocumentDOM().getTimeline();//獲取當前文檔當前時間軸
for (i=0;i curLayer=tl.layers[i]; if (curLayer.name=="圖層1"){ //定位到“圖層1” frameArray=curLayer.frames; //獲取“圖層1”上所有幀 for (j=0;j curFrame=frameArray[j]; //獲取“圖層1”上第j幀 elts=curFrame.elements; for (t=0;t if (elts[t]. name== "玫瑰") fl.trace("Frame "+ j +"Element "+ t +" Name = "); //輸出名為“玫瑰”元件的幀號及元素編號 }}} 又如,判斷庫中元件是否為聲音元件可使用以下JSFL腳本: var myCurrentLib = fl.library; //myCurrentLib為當前文檔的庫' var ItemNums=fl.library.items; for (var i=0;i if (myCurrentLib.items[i].itemType=="sound") //使用item對象的itemType屬性判斷庫里元件類型 fl.trace("This is a sound Item");} 3.1 JSFL在Flash作品自動評價中的應用 根據(jù)計算機作品自動評價的常規(guī)流程:獲取源文件知識點,將其與標準答案比對給分,設計評價腳本check.jsfl如下: var flashDoc = fl.openDocument(strInFile);//打開源文件 var score=Check(flashDoc); //讀知識點信息并與標準答案匹配給分 Update(score); //上傳成績 將該腳本存于flash安裝目錄的Commands文件夾下,在flash編輯環(huán)境中執(zhí)行“命令”菜單中“運行命令”或第三方開發(fā)軟件調(diào)用flash的該命令即可執(zhí)行相應的評價腳本. 其中Check(flashDoc)為知識點信息讀取與比較函數(shù),其內(nèi)容根據(jù)實際作品文檔具體展開.有案例如下: 設計一個主題為“水滴”的作品,實現(xiàn)一個水滴從葉子上滴落并漸隱的動畫效果.相關答題素材及標準答案分別如圖2、圖3所示.作品涉及的知識點有:舞臺屬性(大小、背景色),新建圖層,庫操作(元件命名),圖形對象屬性(位置,透明度),補間動畫.相應評分規(guī)則如表1所示. 圖2 Flash答題文件Fig. 2 The test file of Flash 圖3 Flash標準答案參考文件Fig. 3 The reference of Flash standard answer 題號題目描述評分細則分值1將“水滴.fla”文件的舞臺大小改為400×300像素,舞臺背景顏色設為#00cc99.舞臺大小正確舞臺背景顏色正確10分10分2新建一個名為“blank”的圖層,將庫中影片剪輯“我的新建”重命名為“我的樹葉”.新建圖層正確元件重命名正確10分10分3將“水滴動”圖層第50幀的“水滴”圖形的透明度設為50%,并將該幀“水滴”圖形移動到所在葉片下方.圖形的Alpha值正確圖形的橫坐標正確(誤差范圍68~210)圖形的縱坐標正確(誤差范圍240~300)20分10分10分4在“水滴動”圖層的第40幀和第50幀之間創(chuàng)建動作補間動畫.創(chuàng)建了補間動畫正確20分 Check函數(shù)代碼摘要如下: if(flashdoc.width==400 && flashdoc.height==300) score=score+10; //舞臺大小正確 if (flashdoc. backgroundColor==”#00cc99”) score=socre+10; //舞臺背景顏色正確 var mytimeline=flashDoc.getTimeline(); var i; for(i=0; i< mytimeline.layerCount;i++) if (mytimeline.layers[i].name==”blank”) break; if (i< mytimeline.layerCount && mytimeline.layerCount>2) score=score+10; //新建圖層正確 var ItemNums=flashDoc.library.items var flag1=0,flag2=0; for (i=0; i if (flashDoc.library.items[i].name==”我的樹葉”) flag1=1; if (flashDoc.library.items[i].name==”我的新建”) flag2=1; if(flag1 && !flag2) score=score+10; //元件重命名正確 for(i=0; i< mytimeline.layerCount;i++) if (mytimeline.layers[i].name==”水滴動”) {var curlayer= mytimeline.layers[i]; break;} if (i {var myInstance= curlayer.frames[49].elements[0] if(myInstance. colorAlphaPercent==50) score=score+20; //圖形的透明度設置正確 if (myInstance.left>=68 && myInstance.left<=210) score=score+10; if (myInstance.top>=240 && myInstance.top<=300) score=score+10;} if(curlayer.frames[40].tweenType==”motion”) score=score+10; //動作補間正確 3.2 自動評價中提高文檔識別率的幾種方法 Flash作品自動評價的實現(xiàn)及準確率的保證關鍵在于知識點信息的獲取,其實質(zhì)是對Flash文檔的識別.基于DOM的腳本訪問為識別Flash文檔中的大部分元素提供了方便,但在實際應用過程中,尚有一些知識點的判斷不能以此方法直接得到.為此提出以下幾種變通方法,并且經(jīng)過實驗已證明可行. 3.2.1 間接分析法 此方法適用于通過對其他對象的屬性或本對象的其他屬性能分析出所需關鍵信息的情況.比如對不同幀的識別與判斷. Flash動畫遵循最基本的動畫原理,即通過連續(xù)快速地播放靜止的圖片,利用人眼的“視覺暫留”現(xiàn)象,產(chǎn)生活動影像的效果.這些靜止的圖片稱為幀,是制作動畫的核心要素.根據(jù)動畫實現(xiàn)的不同需求,flash中的幀分為普通幀、空白幀、關鍵幀和空白關鍵幀. 關鍵幀是包含了動畫對象的屬性更改或ActionScript代碼以控制文檔某些方法的幀.根據(jù)這些信息,flash能在兩個關鍵幀之間自動計算出其過渡幀,從而模擬出變化過程.因此,關鍵幀是舞臺上存在實例對象并可對其進行編輯的幀.相應的,普通幀間用于延長動畫長度的幀,其上元素對象不能被編輯.空白幀即舞臺上沒有任何元素的幀,若該幀能被添加、編輯動畫對象則為空白關鍵幀. 識別作品中幀的不同類型,對于判別作者最基本的動畫理念及制作技術具有重要意義.在研究了JSAPI中關于幀的屬性后,筆者發(fā)現(xiàn)沒有一個屬性可以直接用來區(qū)分上述幀類型.但若利用幀的startFrame屬性和elements屬性可根據(jù)幀定義來分析得到幀類型.如前文所述是否為空白幀可通過該幀舞臺上的對象數(shù)是否為0來判斷,即當某幀elements.length=0時,該幀為空白幀或空白關鍵幀.從動畫生成的角度來看,關鍵幀位于動畫序列的兩端,而startFrame正好提供了動畫序列起始幀的索引號,那么在遍歷幀的過程中若當前幀的索引號正好等于所處動畫序列起始幀的索引號,則可以推測該幀就為關鍵幀.綜合上述兩個條件,便可判斷出所有幀的類型.代碼片斷如下: var flgKey,flgEmpty; flgKey=flgEmpty=0; \flgKey=0表示非關鍵幀,flgEmpty=0表示非空白 var frameArray = curlayer.frames; for(i=0;i< frameArray.length;i++){ var myElements= frameArray[i].elements; if (i==frameArray[i].startFrame) flgKey=1; if (myElements.length==0) flgEmpty=1; if (flgKey) if (Empty) fl.trace("Frame["+i+"] is a Blank Keyframe"); else fl.trace("Frame["+i+"] is a Keyframe"); else if (Empty) fl.trace("Frame["+i+"] is a Blank Frame"); else fl.trace("Frame["+i+"] is a Normal frame"); } 3.2.2 實例采樣法 當獲取完整對象比較困難或遍歷某對象集需要太多時間開銷時,若該對象(集)某個局部區(qū)域能反映整個對象(集)的指定特征時,可采用實例采樣法獲取文檔信息.比如需要了解一個不規(guī)則圖形被施加的編輯效果,考慮使用這種方法. 對于對象集的采樣,一般在遍歷過程中選定合適的循環(huán)起止來確定樣本片斷即可,此處不再贅述.下面介紹一下對象局部區(qū)域的采樣.此采樣法主要是利用Document對象的setSelectionRect方法來實現(xiàn).該方法表示使用指定坐標繪制相對于舞臺的矩形選取框.其語法表示及參數(shù)說明如下: 語法: document.setSelectionRect(rect [,bReplaceCurrentSelection [, bContactSensitiveSelection]]) 參數(shù):rect 一個要設置為選中內(nèi)容的矩形對象. 其格式為{left:value1,top:value2,right:value3,bottom:value4}.left和top值表示指定對象左上角的位置(如left:0,top:0表示舞臺的左上角),right和bottom值指定對象右下角的位置. bReplaceCurrentSelection 一個布爾值,它指定方法是替換當前的選擇(true),還是添加到當前的選擇中(false).默認值為true. bContactSensitiveSelection 一個布爾值,它指定在對象選擇過程中是啟用(true)還是禁用(false)接觸感應選擇模式.默認值為false. 圖4 船帆采樣Fig. 4 Sampling of sail 如需要檢測圖4中船帆的填充色是否為“白色”時,可以在船帆中取一個具有代表性的矩形區(qū)域(圖中虛線所示),以此區(qū)域的填充色為評價的樣本.代碼實現(xiàn)如下: flashDoc.setSelectionRect({left:249, top:130, right:267, bottom:178});\flashDoc表示當前文檔 fl.trace (flashDoc.getCustomFill().color); 3.2.3 正則表達式 Flash動畫不僅止于簡單的畫面順序播放,其特色更體現(xiàn)在強大的交互性及數(shù)據(jù)處理能力,而這部分工作則由flash的腳本語言ActionScrip來完成.所謂ActionScript是針對Adobe Flash Player運行時環(huán)境的編程語言,它在Flash內(nèi)容和應用程序中實現(xiàn)了交互性、數(shù)據(jù)處理以及其它許多功能.由此可見對ActionScript腳本的識別也是flash文檔識別中一項重要的內(nèi)容. 雖然具有一系列的語法規(guī)范,因作者的編程風格不同,實現(xiàn)同樣的功能也會有多種不同的表達形式,所以消除冗余代碼,將各種等價的表達標準化為統(tǒng)一的形式是提高代碼識別率的有效手段之一.正則表達式在這方面可能會提供一個較好的解決方案. 所謂正則表達式,就是一種描述字符串結構模式的形式化表達方法.配合上特定的工具提供的額外支持,正則表達式能夠添加、刪除、分離、疊加、插入和修整各種類型的文本和數(shù)據(jù)[2].其在數(shù)據(jù)驗證、文本檢索方面表現(xiàn)出色.比如正則表達式“[0-9a-z_!.?]”能夠匹配一個數(shù)字、小寫字母、下畫線、感嘆號、點號,或者是問號,其中0-9表示9個數(shù)字中任一1個.又如表達式“user
/gi”匹配指定字符串中所有“user”后是回車換行符的子串,且對于user不區(qū)別大小寫,即回車換行符前是“User”、“USER”等的情況也匹配.此處“
”、“
”分別表示回車符(對應ASCII的 基于此,將在flash文檔識別的腳本中使用javascript的replace函數(shù),并將構建的正則表達式作為該函數(shù)的參數(shù)傳入即能實現(xiàn)部分代碼的規(guī)范化.如使用以下語句將取得的ActionScript代碼去掉所有回車換行符,并以不區(qū)分大小寫的方式輸出. var str=curFrame.actionScript,使用幀對象的actionScript屬性獲取當前幀中的腳本代碼; fl.trace(str.replace(/
/gi, ""))
/gi為構建的正則表達式. 表2 Flash知識點自動評價正確率Tab. 2 Correct rate of Flash knowledge auto-evaluation 綜合使用上述技術實現(xiàn)的Flash作品自動評價系統(tǒng),在浙江省高中信息技術會考應用中已取得一定成效.作者以浙江省會考的5套Flash作品試題為自動評價對象,組織10人按不同方式回答該10套試題,自動評價后按照知識點分析結果如表2所示. JSFL是一種輕量級的腳本語言,基于DOM的文檔訪問方式使其對Flash文檔及其元素的操縱變得容易實現(xiàn),“間接分析”、“實例采樣”、“正則表達式”等方法的結合使用又使Flash文檔的識別率得以提高,給自動評價的準確性提供了有效保障.該技術已連續(xù)三年在浙江省高中信息技術會考自動化評價中加以應用,取得了良好的效果,具有一定的推廣價值. [1] 王德東,楊永華,盧暢.基于JSFL的Flash自動測評系統(tǒng)研究[J].浙江海洋學院學報:自然科學版,2010,29(1):89-94. [2] Jeffrey E F, Fried l,余晟.精通正則表達式[M].3版.北京:電子工業(yè)出版社,2007. Auto-EvaluationTechniquesofFlashWorksBasedonJSFL XIANG Jie, JIANG Hua-qiang, ZHOU Yan-jun (Hangzhou Institute of Service Engineering, Hangzhou Normal University, Hangzhou 310012, China) This paper introduced the auto-evaluation techniques of flash works based on JSFL script,and proposed the methods of indirect analysis, sampling and regular expressions which could improve the correct identification rate of flash documents. The results show that the application of the technique not only simplifies the implementation process of flash works’ auto-evaluation, but also improves the accuracy of the evaluation work, it has some practical value. Flash; JSFL; Flash DOM; auto-evaluation 10.3969/j.issn.1674-232X.2011.02.017 2010-10-08 項 潔(1981—),女,浙江杭州人,講師,碩士,主要從事計算機教育與應用、多媒體技術、人工智能等研究.E-mail: xj2002xj@vip.sina.com TP319 A 1674-232X(2011)02-0174-073 基于JSFL的Flash作品評價技術
4 Flash作品自動評價實例的效果分析
5 結 論