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