喬嘉琦+任冬玲
(西京學(xué)院經(jīng)濟(jì)管理系國(guó)際經(jīng)濟(jì)與貿(mào)易1501班,陜西 西安710123)
【摘 要】FLASH作為目前應(yīng)用最廣泛的交互式矢量動(dòng)畫制作軟件,被廣泛應(yīng)用于動(dòng)畫制作、游戲設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、廣告設(shè)計(jì)等領(lǐng)域。多媒體是用語詞和畫面共同呈現(xiàn)材料,比單一的用語詞呈現(xiàn)更能促進(jìn)學(xué)生對(duì)科學(xué)解釋的理解。所以FLASH軟件應(yīng)用于教學(xué)多媒體的制作勢(shì)在必行,但是教學(xué)人員的主要任務(wù)在教學(xué)設(shè)計(jì),而非FLASH技術(shù)本身,故本文總結(jié)了幾點(diǎn)用FLASH制作多媒體的感悟,希望能讓教學(xué)人員在技術(shù)上省力,在教學(xué)設(shè)計(jì)上加力。
【關(guān)鍵詞】FLASH;多媒體;ActionScript 3.0
多媒體指用語詞和畫面共同呈現(xiàn)材料。使用多媒體的基本理論前提為:采用語詞和畫面的組合呈現(xiàn)比只采用語詞的單一呈現(xiàn)更容易使學(xué)習(xí)者理解科學(xué)解釋[1]。多媒體制作軟件之一——FLASH是目前應(yīng)用最廣泛的交互式矢量動(dòng)畫制作軟件,是一個(gè)功能強(qiáng)大的多媒體集成開發(fā)環(huán)境,被廣泛應(yīng)用于動(dòng)畫制作,游戲設(shè)計(jì)等領(lǐng)域[2]。FLASH的主要優(yōu)點(diǎn)是動(dòng)畫作品體積小,動(dòng)畫效果非常精致。FLASH強(qiáng)大的媒體兼容能力,矢量動(dòng)畫能力,面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,鮮明的網(wǎng)絡(luò)特性,強(qiáng)大的跨平臺(tái)特性使其在多媒體制作上魅力倍增。特別是FLASH可以在嵌入式系統(tǒng)中應(yīng)用,尤其是在智能手機(jī)上 [3],這為移動(dòng)學(xué)習(xí)的發(fā)展提供了良好的契機(jī)。
一、交互的基礎(chǔ)——DOM事件模型
利用FLASH強(qiáng)大的交互功能制作出的交互性多媒體能帶給學(xué)生更多的感官體驗(yàn),能增強(qiáng)學(xué)生的學(xué)習(xí)動(dòng)機(jī)。但是如果要在FLASH中做出完美而且準(zhǔn)確的交互動(dòng)畫,就須明白FLASH的交互原理——DOM事件模型。ActionScript 3.0(以下簡(jiǎn)稱AS3.0)是面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,采用了一個(gè)統(tǒng)一的、基于文檔對(duì)象模型(DOM)第三級(jí)事件規(guī)范的事件模型[4]。DOM事件模型主要包含三個(gè)概念:事件流、事件對(duì)象和事件偵聽器。
(一)事件流。事件流是事件實(shí)例在顯示對(duì)象層次結(jié)構(gòu)中的穿行過程。當(dāng)程序觸發(fā)任何一個(gè)事件時(shí),F(xiàn)lash Player就會(huì)產(chǎn)生一個(gè)相應(yīng)的事件實(shí)例,這個(gè)實(shí)例會(huì)將自己“廣播”給程序的所有可接收事件的對(duì)象。如果該對(duì)象(觸發(fā)程序的顯示對(duì)象)處于顯示對(duì)象層次結(jié)構(gòu)中,則Flash Player將事件沿著層次結(jié)構(gòu)穿行到事件目標(biāo),完成后有回溯到Flash Player,這個(gè)過程就是事件流。事件流分為三個(gè)階段:捕獲階段、目標(biāo)階段和冒泡階段。
(二)事件對(duì)象。事件對(duì)象是承載事件信息以及一些事件處理方法的對(duì)象。當(dāng)AS 3.0中發(fā)生了事件并且觸發(fā)了事件調(diào)度的調(diào)用時(shí),消息就會(huì)被發(fā)送到事件的所有接收者,該消息以事件對(duì)象的形式發(fā)送。例如用戶的輸入會(huì)產(chǎn)生鼠標(biāo)事件(MouseEvent)和鍵盤事件(KeyboardEvent)。
(三)事件偵聽器。事件偵聽器解決的是如何響應(yīng)事件的問題。具有IEventDispatcher接口的類都具有事件偵聽的能力。要使一個(gè)對(duì)象偵聽某個(gè)事件,就要使用addEventListener方法注冊(cè)事件偵聽器。具體的代碼格式不再細(xì)述。
二、FLASH中的ENTER_FRAME事件
下面的幾個(gè)問題幾乎都牽涉到了ENTER_FRAME事件,ENTER_FRAME事件是FLASH中典型的延遲循環(huán)模式,指每經(jīng)過一幀的間隔就會(huì)自動(dòng)觸發(fā)一次的事件,即使播放頭已經(jīng)停止播放也會(huì)觸發(fā)。ENTER_FRAME事件流不經(jīng)過顯示對(duì)象的層次關(guān)系而直接發(fā)送給偵聽器對(duì)象,即所有的顯示對(duì)象幾乎同時(shí)接收到ENTER_FRAME事件。
三、FLASH中聲音的處理技巧
聲音在多媒體中的應(yīng)用非常廣泛。例如在動(dòng)畫演示時(shí)加入配套的音效,可讓學(xué)生產(chǎn)生身臨其境的感覺,調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性。FLASH處理聲音的方法有三種。
①將庫中的聲音文件放置在時(shí)間軸上,并設(shè)置聲音的同步方式,多用于設(shè)置按鈕音效。這種方法簡(jiǎn)單直觀,但是不能在AS 3.0中控制播放,并總與時(shí)間軸綁定,缺少靈活性。②將聲音鏈接為AS 3.0導(dǎo)出后,在AS 3.0中使用它,多用于加入游戲音效。設(shè)置方式為:選中一個(gè)聲音文件,右擊彈出快捷菜單,選擇“屬性”,在彈出的對(duì)話框中勾選“為AS 3.0導(dǎo)出”。它會(huì)提示自動(dòng)創(chuàng)建了一個(gè)新類,就是Dysound,聲音文件已被封裝在這個(gè)類中,可在AS 3.0中編程控制。③通過導(dǎo)入外部文件的方式使用聲音。即聲音不在庫中,通過一個(gè)URL,在運(yùn)行時(shí)加載。外部導(dǎo)入聲音文件的優(yōu)勢(shì)在于其大大減小了SWF文件的大??;其次,外部載入聲音的音質(zhì)要比時(shí)間軸上的音質(zhì)好很多;第三是可以在AS 3.0實(shí)現(xiàn)對(duì)聲音的完美控制。
四、外部導(dǎo)入視頻與背景音樂沖突的BUG的解決
視頻以其直觀和豐富的特性在多媒體中占有重要地位,但在FLASH中導(dǎo)入外部視頻時(shí),易產(chǎn)生與現(xiàn)有音樂沖突的BUG,即幾個(gè)聲音同時(shí)響起,下面說明解決方法。
例:要做一個(gè)交互結(jié)構(gòu)的多媒體(nav1_mc、nav2_mc、nav3_mc為影片剪輯(以下簡(jiǎn)稱MC)的實(shí)例名,封裝在info_mc中)。
目的有二,一是當(dāng)“活動(dòng)(nav1_mc)”偵聽到鼠標(biāo)的“click”事件時(shí),會(huì)載入一段外部視頻,這時(shí)要暫停背景音樂。二是當(dāng)關(guān)閉視頻時(shí),背景音樂重新響起。
第一,加載外部聲音文件為背景音樂;
第15-26行:當(dāng)單擊外面nav3_mc載入視頻時(shí),關(guān)掉背景音樂。
第26行:是讓info_mc偵聽opensound的循環(huán)偵聽,opensound函數(shù)的行為是當(dāng)info_mc完全關(guān)閉時(shí)打開背景音樂播放控制與狀態(tài)。
第二,導(dǎo)入外部視頻文件(.flv格式);
第29-31行:當(dāng)單擊外面的close_mc(視頻關(guān)閉剪輯的實(shí)例名)時(shí)關(guān)閉視頻的播放。視頻的關(guān)閉使info_mc處于完全關(guān)閉的狀態(tài),故它會(huì)偵聽到opensound的循環(huán)偵聽,背景音樂隨之響起;
第43-47行:當(dāng)單擊外面的nav1_mc時(shí)停止播放視頻并移除nav3_mc的偵聽。
到此就實(shí)現(xiàn)了外部導(dǎo)入視頻與背景音樂的完美切換。這個(gè)例子不僅說明了如何實(shí)現(xiàn)外部導(dǎo)入視頻與背景音樂的切換,而且也說明了如何實(shí)現(xiàn)聲音與聲音的切換,視頻與視頻的切換。
五、影片剪輯的倒播
多媒體動(dòng)畫在播放時(shí),想要回放部分動(dòng)畫,就需使MC倒播。MC的倒播是利用prevFrame()(上一幀)函數(shù)、nextFrame()(下一幀)函數(shù)及ENTER_FRAME事件實(shí)現(xiàn)的。
例:對(duì)紅色方塊做如圖9所示的補(bǔ)間動(dòng)畫,效果為:當(dāng)單擊前進(jìn)按鈕(ballGo)時(shí),紅色方塊向右移動(dòng),當(dāng)單擊后退按鈕(ballBack)時(shí),紅色方塊向左移動(dòng)。
當(dāng)ballGo按鈕偵聽到鼠標(biāo)的click事件時(shí),舞臺(tái)也會(huì)偵聽到ENTER_FRAME事件,紅色方塊就會(huì)產(chǎn)生frameHandler1()函數(shù)所定義的行為——紅色方塊向右移動(dòng),此行為將持續(xù)到刪除舞臺(tái)對(duì)ENTER_FRAME事件的偵聽為止。
當(dāng)ballBack按鈕偵聽到鼠標(biāo)的click事件時(shí),舞臺(tái)也會(huì)偵聽到ENTER_FRAME事件,紅色方塊就會(huì)產(chǎn)生frameHandler1()函數(shù)所定義的行為——紅色方塊向左移動(dòng),此行為將持續(xù)到刪除舞臺(tái)對(duì)ENTER_FRAME事件的偵聽為止。
六、利用trace語句排除運(yùn)行時(shí)錯(cuò)誤
程序錯(cuò)誤有兩種,一種是語法錯(cuò)誤,編譯時(shí)提示編譯錯(cuò)誤并列出錯(cuò)誤所在的位置。另一種是運(yùn)行錯(cuò)誤,編譯通過了,但是由于某些程序的邏輯錯(cuò)誤或者其他不確定的原因無法得到預(yù)期的效果,從而造成的各種各樣的程序錯(cuò)誤。在程序運(yùn)行時(shí),某些邏輯錯(cuò)誤并不會(huì)使Flash Player拋出任何異常。這時(shí)可使用trace語句,跟蹤代碼的執(zhí)行,輸出一些關(guān)鍵變量的值,看是否與預(yù)期的相符,直到追溯到錯(cuò)誤的發(fā)生地。
例:在一個(gè)練習(xí)打字的游戲中,每個(gè)字只有三次輸入機(jī)會(huì),若三次機(jī)會(huì)用完后還沒有打?qū)υ撟?,那么得?fù)習(xí)該字后才能再繼續(xù)打字游戲。但在測(cè)試中發(fā)現(xiàn),玩家可以連續(xù)的進(jìn)行打字,沒有次數(shù)的限制,這時(shí)可以用trace語句跟蹤代碼的執(zhí)行。
首先在打字次數(shù)自減一的代碼之后添加trace語句。
chanceCount--;
trace(“chanceCount=”+chanceCount);
這樣在測(cè)試的時(shí)候,就會(huì)在每次打字次數(shù)減一時(shí)輸出當(dāng)前所剩的次數(shù)。測(cè)試影片,看是否每次打錯(cuò)之后都輸出了所剩的次數(shù),假如沒有任何輸出,那就說明這兩行代碼沒有被執(zhí)行。
上述幾點(diǎn)都是利用FLASH軟件在制作多媒體時(shí)常遇到的幾個(gè)問題,特羅列出來,希望能對(duì)正遇到這幾個(gè)問題的同仁們一點(diǎn)幫助。
作者簡(jiǎn)介:?jiǎn)碳午?998—),男,山西大同人,國(guó)際經(jīng)濟(jì)與貿(mào)易1501班學(xué)生。
任冬玲(1982—),男,山西大同人,講師職稱,碩士學(xué)位,研究方向?yàn)槲锪鞴こ膛c管理。
【參考文獻(xiàn)】
[1]理查德.梅耶.《多媒體學(xué)習(xí)》,商務(wù)印書館,2006(11).
[2] [3]肖剛.《Flash游戲編程教程》,清華大學(xué)出版社,2009(01).
[4]Roger Braunstein.《ActionScript 3.0寶典(第二版)》,清華大學(xué)出版社, 2012(01)