于洪
(海南熱帶海洋學(xué)院,海南三亞 572022)
Flash是Macromedia公司推出的一款集動畫創(chuàng)作與應(yīng)用程序開發(fā)于一體的創(chuàng)作軟件,設(shè)計人員或開發(fā)人員可使用它來創(chuàng)建演示文稿、應(yīng)用程序和其他允許用戶交互的內(nèi)容。它可以包含動畫、視頻、音頻、復(fù)雜演示文稿和應(yīng)用程序以及介于它們之間的任何內(nèi)容。由于采用了矢量動畫和元件,使得它的存貯空間可以很小。用它編輯的程序可生成可執(zhí)行文件(文件擴(kuò)展名為.swf),它即可在Flash播放器中播放,也可以在瀏覽器中播放,應(yīng)用面非常廣[1]。
小學(xué)生由于具體的直接經(jīng)驗不足,有些較為抽象的內(nèi)容難以理解。利用Flash制作的課件由于具有聲畫并茂、交互性強(qiáng)等優(yōu)點(diǎn),可以彌補(bǔ)學(xué)生直接經(jīng)驗不足的缺點(diǎn),所以被越來越多的小學(xué)老師所接受,廣泛地應(yīng)用于課堂教學(xué)和學(xué)生自學(xué)等多方面。在教學(xué)實踐中,要想掌握好flash的交互,必須在兩方面有較深地理解:一是層;二是元件。這兩方面是課件中必然要用到的,對它們進(jìn)行深入學(xué)習(xí)對做一個優(yōu)良的課件有著很大的幫助。在Flash中層有三種:一般層、引導(dǎo)層和遮罩層。Flash在播放時是按幀的順序來播放的,有些時候我們希望多幀的內(nèi)容同時顯示出來(這在交互菜單中是多見),所以多層這時候就一定要用到了,在一般的程序設(shè)計中,時間線上的一般層都是會出現(xiàn)多層的,更不要說要加入遮罩、引導(dǎo)等內(nèi)容了,這會需要更多的層來完成程序。另外在交互中還常用到的是元件,它很像我們小時候玩的搭積木,元件就是一塊塊事先準(zhǔn)備好的積木,我們只要把它們一塊塊拼裝起來就行了[2]。它也有三種:圖形元件、按鈕元件和電影片斷元件。我們??梢园岩恍《螆?zhí)行程序編成電影片斷元件,然后利用腳本來調(diào)用,這樣程序的流程更清晰明了,可讀性更強(qiáng)。Flash腳本應(yīng)用JavaScript2.0,JavaScript是ECMAScript腳本語言的一個分支。這版軟件更適合非計算機(jī)類的人員學(xué)習(xí)和應(yīng)用,更容易理解,它功能更強(qiáng)大,特別適合在交互式的多媒體教學(xué)軟件中應(yīng)用。
我們利用flash菜單中的Insert菜單中的New Symbol制作按鈕,按鈕的形狀我們可以隨意制作,并在里面寫上“按鈕”兩個字。在第一幀我們將菜單按鈕引入,并在此幀的腳本(Actions-frame)上寫stop();命令。當(dāng)程序運(yùn)行時由于第一幀有停止命令,程序會停在此幀。然后增加一層,在第二幀增加關(guān)鍵幀,然后在此關(guān)鍵幀上畫一小塊,然后在此層十幀畫一拉長的小塊。將第二幀和第十幀的小塊打散,然后做形變動畫。注意在形變動畫的幀腳本中最后一幀要加入stop();命令。然后我們在這一層把前面這一段形變動畫再反著做一個,也就是收回去的形變動畫。在第一層的第一幀的按鈕命令(Actions-buttom)上添加腳本on(press){gotoAndPlay(形變伸出開始的幀數(shù));}和on(rollOut){gotoAndPlay(形變回收開始的幀數(shù));}。于是就出現(xiàn)了一開始有一個菜單,單擊之后會伸出一塊區(qū)域,然后我們再新加一層,然后在新加的層中拉升的小塊的幀上可以放入新的按鈕,按鈕上可以用腳本寫入跳轉(zhuǎn)的幀上。這樣一來,一個伸縮式菜單就做好了,這里一定要注意開始的菜單按鈕和變形的小塊和跳轉(zhuǎn)的按鈕一定要分在不同的層中,這樣才能實現(xiàn)我們的要求。因為分了層之后,你希望哪一層的內(nèi)容出現(xiàn)多長時間就可以通過添加一般幀的辦法得以實現(xiàn)。這還得注意一點(diǎn),多層雖然在顯示時上面一層會蓋住下面的一層,但是下面一層的按鈕還是可以控制的,所以在上面畫出按鈕的形狀,則打開和關(guān)閉時會更好看,但只要下面一層是按鈕,其按鈕功能還是正常使用的。我們一般是先將下面一層的按鈕畫在合適的位置,一切調(diào)好之后只要在控制區(qū)將上一層時間線拉到下一層即可。如圖1:
圖1 伸縮式菜單
Flash能夠制作有流動效果的程序,這離不開遮罩技術(shù)的運(yùn)用。由于有了遮罩技術(shù),一些我們無法想象的功能可以得到開發(fā),比如我們的這個流水程序。在最底層,我們放入一個有瀑布的畫面,中間是流水,兩邊是山和樹木。但這只是一張靜止的圖片,怎么能讓它看起來有流水的感覺呢?我們添加一層,把剛才那一層的圖片復(fù)制在這一層,并且位置在高低上要稍微有一點(diǎn)變化,不能放在同一個位置,但也不要移動太多。然后打散該層,利用橡皮工具把除了瀑布中水之外的內(nèi)容全部刪除,只剩下流水的畫面。然后我們再增加一層,在這一層中我們利用刷子工具畫一些波紋線,線條的顏色、形狀基本不用考慮太多,因為一會兒它要被作為遮罩,這些也看不見了。這里要注意的是要畫的波紋要是水的高度的一倍,這樣一會兒運(yùn)行起來才會逼真。畫好波紋后,讓波紋的底邊與瀑布的底對齊,然后打散,制作一個移動動畫,讓波紋從上往下移動,當(dāng)波紋的頂與瀑布的頂對齊時即可。然后我們把這一層做成遮罩。運(yùn)行起來你就會看到水好像在流動一樣。如圖2:
圖2 流水效果
漢字的書寫順序非常重要,也是小學(xué) 語言教學(xué)中非常重要的一個方面。筆者作為中小學(xué)教師資格證面試的教官,在實踐活動中經(jīng)常看到一些考生連基本的筆畫順序都是錯誤的。利用Flash的遮罩技術(shù)可以很好地把字的筆畫順序表現(xiàn)出來,對于小學(xué)的語言教學(xué)有很好的作用。我們都知道遮罩層只對時間線上遮罩層的下一層起作用,而再下幾層是不能遮住的。為了便于控制,我們將筆畫順序這個動畫做成電影片斷元件。利用Insert菜單中的New Symbol命令新建一個電影片斷元件。進(jìn)入電影片斷元件后,我們先要在畫圖軟件上用紅色(這里顏色隨便)寫一個漢字,存盤。然后再把這個漢字改為另一種顏色存盤。我們就有了兩個顏色不同的兩個一模一樣的漢字圖畫了。這里一定要注意,在時間線上的漢字一定要用外面的圖畫,不能直接寫在程序的幀上,很多同學(xué)做不出筆畫運(yùn)行的效果就是這個原因。利用導(dǎo)入將兩幅圖畫導(dǎo)入到庫中,在第一層將紅色字的圖畫導(dǎo)入到程序中來,新建一層,將另一種顏色的字也導(dǎo)入到幀中,并將位置調(diào)好,使上一層的字將下一層的字完全遮蓋好。然后再新建一層,這一層是用來做遮罩層的,在這一層中按照字的筆畫做一個形狀動畫,由于遮罩層的內(nèi)容是看不到的,所以用什么顏色并不重要,注意的是粗細(xì)要調(diào)整好,因為它直接影響到顯示出來的內(nèi)容的多少。按照字的筆畫順序,在這一層中每一個筆畫都做一個形狀動畫。做好之后將這一層設(shè)成遮罩層。此電影片斷做好之后就可以看到一個字按筆畫順序?qū)懗鰜淼倪^程。為了能控制筆畫的書寫,即我們命令它運(yùn)行時它運(yùn)行,但我們可以隨時命令它停下來,然后我們命令它運(yùn)行時它能接著原來的部分運(yùn)行。在電影片斷的第一幀和最后一幀我們加入幀命令stop()。這樣,當(dāng)我們把元件拉入舞臺上作為實例時,運(yùn)行時電影片段也不會自動運(yùn)行。為了能自如地控制動畫的運(yùn)行,我們先給電影片斷元件起一個別名,比如“筆劃”。然后我們在舞臺上加入兩個按鈕,一個負(fù)責(zé)筆畫運(yùn)行,一個負(fù)責(zé)筆畫停止。然后在兩個按鈕中加入按鈕命令。負(fù)責(zé)筆畫運(yùn)行的按鈕命令中寫入:on(release){筆畫.play();}。負(fù)責(zé)停止的按鈕在按鈕命令中寫入:on(release){筆畫.stop();}。于是一個可以隨意控制字的筆畫運(yùn)行的小程序就設(shè)計好了。如圖3:
圖3 筆畫順序
對于電影片斷一般人都會用,它因為只需要在時間線上一個幀就能播放而被常用。但是如果能在程序運(yùn)行過程中復(fù)制電影片斷,那對我們的程序就會起到很好的幫助作用。如下例,程序會自動出10以內(nèi)的加法題,可是如果小朋友不會做,那我們可以出現(xiàn)具體的物體,讓小朋友來數(shù)一數(shù),加強(qiáng)他們的數(shù)學(xué)計算能力。如圖4:
圖4 復(fù)制電影片斷
當(dāng)程序出題后,小朋友不會做,可以按幫助按鈕,于是在題目下邊就會出現(xiàn)加數(shù)和被加數(shù)的小鳥,小朋友可以通過數(shù)一數(shù)的辦法來知道結(jié)果。那如何在界面上出現(xiàn)和題目相同的個數(shù)的小鳥呢?
為了能自動復(fù)制出一定數(shù)量的圖片,首先將一個電影片斷的元件(這里可以只是個圖片)拉入場景中,但不要放在舞臺上,可以放入后臺。在放映時只有在舞臺上的內(nèi)容才能被放映出來,而在后臺上的內(nèi)容是不會被顯示出來的。我們在后臺放置一個圖片只是作為被復(fù)制的內(nèi)容而已,它本身是不能顯示的。
因為我們要復(fù)制這個電影片斷實例,所以必須給這個元件起個名字,比如 y0。我們會發(fā)現(xiàn)只有把電影片斷拉入舞臺后,在界面的左下邊才會出現(xiàn)一個文本框,里面寫得有Instance Name,如圖5,而別的元件(如圖形和按鈕元件)拉入舞臺后是不會出現(xiàn)這個框的。這個就是要求你給接入舞臺的這個實例起一個別名,以后在操作中這個別名就代表這個實例。
圖5 實例別名輸入框
為了這個當(dāng)作復(fù)制樣本的元件不可見,可以在第一幀中寫如下語句:setproperty("/y0",_visible,0),這樣,這個實例就不可見了。
為了復(fù)制這個元件,可以如下寫:i=a;,其中的i 代表循環(huán)的次數(shù)。它的值和a相等,所以題目中的加數(shù)和被加數(shù)就被轉(zhuǎn)化過來了。我們可以看到循環(huán)最后一句中的i=i-1,也就是循環(huán)一次i值會自動減1,如此就可以復(fù)制出我們要求的圖片來了。
while(i>0){duplicatemovieclip("/y0","y" add i, i );
setproperty("/y" add i,_y,100+1*50);
setproperty("/y" add i,_x,100+i*50);
i=i-1;}
這里的a等于幾,就可以復(fù)制幾個電影元件的實例出來 。所以我們只要把動態(tài)文本杠中的變量的值賦值給i就行了。復(fù)制語句的用法:duplicateMovieClip(你要復(fù)制的影片名稱,“這個新影片的名稱”,新影片的深度位置),F(xiàn)LASH中的深度就好像其中的層一樣,深度值高的表示他不被深度值低的壓住,反之,就是深度值低的如果與深度值高的相疊,那他就會被深度值高的壓住。在復(fù)制語句中我們要注意使用方法,一是被復(fù)制的實例不能同名,所以可以看到在語句中,每一個被復(fù)制的實例的名字都不同,按y1,y2……的順序出現(xiàn)。大家要特別注意復(fù)制語句中最后一個表示深度變量,它的值也不能是相同的,每一個復(fù)制的實例必須有一個全新的深度值,否則會復(fù)制不出來。
消除這些電影元件的實例,當(dāng)我們不需要這些電影元件的實例時,可以利用以下語句來刪除這些實例。
on(press){i=20;
while(i>0){removemovieclip("/y" add i);
i=i-1;}
這里i的取值和你復(fù)制的實例個數(shù)有關(guān)。這里大家可能會奇怪,為什么i的值會取20,如果我們的實例個數(shù)不足會如何呢?因為我們做的這個例子是10以內(nèi)的加法,所以最大值也就是20了,不會超過,如果沒到,那么刪除語句也不會報錯,它只是不起作用而已。
Flash是一款非常適宜于小學(xué)課堂教學(xué)的編程工具,它采取了對象化設(shè)計,直觀明了,所以對于沒有編程經(jīng)驗的老師也同樣適用[3]。老師們只要掌握Actions命令中Movie Control中的幾個命令就能非常方便地控制程序運(yùn)行了,對于在中、小學(xué)階段的教學(xué)是非常有用的。如今科學(xué)技術(shù)飛速發(fā)展,也要求我們中、小學(xué)老師能適應(yīng)這個社會,在教學(xué)方法、教學(xué)模式上有所改進(jìn),希望老師們都能掌握此款軟件的應(yīng)用,為基礎(chǔ)教育改革做出自己的貢獻(xiàn)。