6.3 快進(jìn)與快退
快進(jìn)與快退技術(shù)似乎是影音播放機(jī)的行為,不錯(cuò),你已經(jīng)可以在這個(gè)程序當(dāng)中了解到用Flash制作影碟播放機(jī)的作用了。在這個(gè)代碼里你還可以了解到電影剪輯和場(chǎng)景之間的路徑是如何使用的,讓_currentframe和_totalframes返回場(chǎng)景的屬性想必已經(jīng)在上例接觸過了,但如果是想在電影剪輯里控制場(chǎng)景的播放順序就要看本例的制作了。另外本例中一個(gè)重要的學(xué)習(xí)就是關(guān)于控制類電影剪輯的使用。這也是Flash動(dòng)畫實(shí)現(xiàn)控制的一個(gè)重要概念,因?yàn)樗械目刂埔话愣加幸粋(gè)過程,比方說我們想讓播放的幀和一個(gè)數(shù)字進(jìn)行比較,如果當(dāng)前幀大于某個(gè)數(shù)字的話,哪么就執(zhí)行某個(gè)功能。如果沒有,就繼續(xù)播放。這個(gè)功能就需要對(duì)兩個(gè)數(shù)字進(jìn)行不斷的比較,而時(shí)間軸是有過程的,如果將進(jìn)行比較代碼加入到按鈕的Action里,哪么不點(diǎn)擊按鈕,代碼就不會(huì)被執(zhí)行。如果是加入到幀上的話,當(dāng)幀播放時(shí)執(zhí)行一次,然后就不會(huì)再執(zhí)行。我們需要的是不斷的進(jìn)行比較,這就可以用到控制類的電影剪輯了。因?yàn)殡娪凹糨嬛械臅r(shí)間軸是與場(chǎng)景與關(guān)的,只要在場(chǎng)景中加入足夠的幀,電影剪輯就會(huì)一直播放下去,不斷的進(jìn)行變量比較,來達(dá)到我們的目的。 步驟一、選擇主菜單中的Window|Common Library|Bottons命令,打開共享庫面板。將快進(jìn)和快退按鈕拖入場(chǎng)景。 步驟二、再次選擇主菜單的Insert|New Symbol命令,選擇MovieClip插入一個(gè)電影剪輯。取名稱為forward,進(jìn)入電影剪輯的編輯區(qū)。 步驟三、雙擊第一幀打開Action面板,選擇Basic Actions指令集中的stop指令,使電影剪輯在起始位置停止播放。 步驟四、在第二幀處按F6鍵加入一個(gè)關(guān)鍵幀。雙擊打開Action面板。 步驟五、選擇Actions指令集中的set variable指令加入一個(gè)變量,在Variable框中輸入變量名為i,在Value欄中輸入代碼_root._currentframe+2。勾選隨后的Expression表達(dá)式單選框。如圖6-16所示。
圖6-16 變量輸入框
步驟六、哪么變量i表示的是場(chǎng)景的當(dāng)前幀加上2了。使用goto就可以實(shí)現(xiàn)跳轉(zhuǎn)了嗎?答案是否,因?yàn)槲覀儸F(xiàn)在是在電影剪輯里,所以如果直接使用goto指令,哪么也只能控制電影剪輯中的指針,想要在goto指令中加入一些對(duì)場(chǎng)景的控制,必須有路徑的支持。 步驟七、哪么并非選擇的是Goto指令,而是選擇Actions指令集中的evaluate指令插入一個(gè)空行,然后輸入代碼_root.gotoandstop(i)。像C語言一樣,Action腳本編程也支持很多種的語法結(jié)構(gòu),特別是在Flash5當(dāng)中使用了.語法。但很多的語法在普通模式下輸入有困難,在專家模式下輸入又容易出錯(cuò),怎么辦?利用evaluate加入空行就是一個(gè)完美的解決方案。完成代碼如圖6-17所示。
圖6-17 Action指令中的空行指令
步驟八、回到電影剪輯編輯區(qū),在第三幀處按F6鍵使之成為關(guān)鍵幀,然后雙擊打開此幀的Action面板。 步驟九、雙擊Basic Actions指令集中的Goto指令,在參數(shù)輸入欄中其它項(xiàng)選默認(rèn),只在Frame欄中輸入2。此舉的用意是在電影剪輯內(nèi)部實(shí)現(xiàn)一個(gè)循環(huán)。當(dāng)?shù)谝粠?dāng)載的時(shí)候,電影剪輯停止播放,但是一旦有命令讓幀跳轉(zhuǎn)到第二幀時(shí),哪么電影剪輯的指針會(huì)在第二幀和第三幀之間來回播放。饒開第一幀的Stop指令。 步驟十、回到場(chǎng)景編輯區(qū),選擇主菜單的Window|Library命令,打開庫面板,把電影剪輯拖到場(chǎng)景編輯區(qū)任意位置,因?yàn)檫@個(gè)電影剪輯其實(shí)是沒有物體內(nèi)容的,它在場(chǎng)景中只會(huì)以一個(gè)小圓點(diǎn)來表示,當(dāng)影片發(fā)布了以后不會(huì)留下任何內(nèi)容。拖入后的效果如圖6-18所示,你可以看到有一個(gè)小圓點(diǎn)。
圖6-18 代表空電影剪輯的小圓點(diǎn)
步驟十一、使用主菜單的Window|Panels|Instance命令打開Instance實(shí)例面板。點(diǎn)擊這個(gè)小圓點(diǎn),使它成為選取狀態(tài),然后在Instance面板中為它取分身名稱為forward。如圖6-19所示。
圖6-19 為空電影剪輯取分身名稱
步驟十二、在倒放按鈕上點(diǎn)擊鼠標(biāo)右鍵選擇Action,為按鈕加入指令。 步驟十三、點(diǎn)擊Actions指令集中的evaluate加入一個(gè)空代碼行。然后輸入代碼_root.forward.gotoandplay(2)。此句的意思為讓場(chǎng)景上的分身名稱為forward的電影剪輯開始播放第二幀。系統(tǒng)會(huì)自動(dòng)加上On(release)行。 步驟十四、按Ctrl+Enter鍵測(cè)試。當(dāng)鼠標(biāo)點(diǎn)擊按鈕時(shí)影片開始進(jìn)速播放直到影片結(jié)束。 步驟十五、然后開始制作快退按鈕的指令,依然是插入一個(gè)電影剪輯。起名為backward,然后進(jìn)入編輯區(qū),按F6鍵使第一、二、三幀都成為關(guān)鍵幀。第一幀指令stop(),第三幀為gotoandplay(2)與快進(jìn)按鈕的一樣。關(guān)鍵的第二幀代碼如下: i=_root._currentframe-2 _root.gotoandstop(i) 對(duì)照代碼如圖6-20。
圖6-20 實(shí)現(xiàn)快倒控制的電影剪輯代碼
步驟十六、回到場(chǎng)景,拖入這個(gè)電影剪輯,用Instance面板為它取分身名為backward。然后在按鈕上加入像快進(jìn)一樣的代碼嗎?你有沒有想過如果兩個(gè)按鈕都被按下兩個(gè)控制影片播放的程序同時(shí)運(yùn)行是會(huì)出錯(cuò)的呢?解決的方法就是當(dāng)一個(gè)按鈕按下時(shí),另一個(gè)按鈕的程序停止運(yùn)行。 步驟十七、鼠標(biāo)右鍵點(diǎn)擊快退按鈕選擇Action項(xiàng),打開Action面板。選擇evaluate插入一個(gè)空行,輸入代碼_root.Backward.gotoandplay(2),再次點(diǎn)擊evaluate項(xiàng)輸入代碼_root.forward.stop()。這樣就實(shí)現(xiàn)了當(dāng)點(diǎn)擊快退按鈕時(shí)快進(jìn)按鈕的程序段停止播放。完成如圖6-21所示。
圖6-21 快退按鈕的完整代碼
步驟十八、同樣將快進(jìn)按鈕的指令改為: on(release){ _root.forward.gotoandplay(2)_root.backward.stop() } 步驟十九、按Ctrl+Enter鍵測(cè)試。如果你仔細(xì)看了這些程序你可以感覺到?jīng)]有加入回放的代碼行。一個(gè)完整的程序行是能經(jīng)得起考驗(yàn)的,是不能存在bug的。哪么我們開始進(jìn)入使之回放的程序設(shè)計(jì)。 步驟二十、在Library庫面板中雙擊forward電影剪輯,進(jìn)入forward電影剪輯的編輯區(qū),雙擊第二幀。打開第二幀的Action面板。 步驟二十一、選取第一行,然后雙擊Actions指令集中的if指令,然后在參數(shù)輸入框中輸入代碼i<_root._totalframes句。 步驟二十二、再雙擊Actions指令集中的set variable指令,輸入變量名為i,Value欄中輸入1,勾選后面的Expression單選框。完成如圖6-22所示。
圖6-22 快進(jìn)電影剪輯的完整代碼
步驟二十三、打開backward電影剪輯,進(jìn)入電影剪輯的第二幀的Action面板。選擇第一行代碼,雙擊Action指令集中的if指令。輸入代碼I<1,然后選擇set variable指令輸入代碼i=_root._totalframes。如圖6-23所示。
圖6-23 快退按鈕的完整代碼
步驟二十四、現(xiàn)在按Ctrl+Enter鍵測(cè)試應(yīng)該沒有什么問題了吧。 程序解讀: 按鈕的程序比較簡(jiǎn)單,當(dāng)快進(jìn)指令的電影剪輯播放時(shí)快退按鈕停止播放?焱税粹o開始播放時(shí),快進(jìn)按鈕停止播放。難點(diǎn)主要還是在功能模塊的電影剪輯里。以快進(jìn)功能的電影剪輯為例。 第一句:賦值變量i為影片根目錄的當(dāng)前幀。 第二句:在當(dāng)前幀的內(nèi)容大于影片的總長(zhǎng)度時(shí)。執(zhí)行if段的指令。 第三句:重新賦值變量i的內(nèi)容為1,也就是重新回到影片的起始位置。 第四句:影片的播放進(jìn)度停止在變量i的內(nèi)容。之所以使用gotoandstop()而不是gotoandplay(),是因?yàn)槲覀儗?shí)際的控制只是讓根目錄的幀實(shí)現(xiàn)跳轉(zhuǎn)。 知識(shí)要點(diǎn): 此例中用影片跳躍似的播放過程,動(dòng)態(tài)的改變了影片的播放進(jìn)度。比方說用功能模塊實(shí)現(xiàn)第一幀跳到第三幀再跳到第五幀。這樣一種跳躍似的前進(jìn),從視覺方面形成了影片的快進(jìn)。而實(shí)際上Flash動(dòng)畫的播放進(jìn)度除了在Movie對(duì)話框中設(shè)置以外,根本不可能在影片播放過程中動(dòng)態(tài)改變。另外在此例中引入了全新的對(duì)影片路徑的認(rèn)識(shí),如在Insert面板中為電影剪輯取分身名稱,這樣影片才會(huì)為電影剪輯設(shè)置路徑。而_root代表的是根目錄的時(shí)間軸,而且只能代表根目錄的時(shí)間軸,你可以使用相對(duì)路徑表示其他的電影剪輯。但如果你想直接使用場(chǎng)景的話,用_root來表示是沒有錯(cuò)的。另外所有的電影剪輯只要是擁有分身名稱的,出現(xiàn)在時(shí)間軸上的電影剪輯,也都可以從_root場(chǎng)景目錄中沿伸下來,當(dāng)然,未在影片播放過程中出現(xiàn)的,沒有取分身名稱的,和其它場(chǎng)景中的電影剪輯不能準(zhǔn)確的描繪其路徑。在制作過程中你可能會(huì)有一點(diǎn)發(fā)現(xiàn),就是變量i在整個(gè)動(dòng)畫過程中出現(xiàn)了兩次,哪么變量的內(nèi)容會(huì)不會(huì)引起沖突呢?答案是不會(huì),在Flash動(dòng)畫中其實(shí)并沒有絕對(duì)的全局變量,雖然全局變量的概念在Flash中也會(huì)存在,但是實(shí)際上Flash并沒有真正意義上的全局變量。這與其它編程軟件有所不同,F(xiàn)lash中的變量都是向下沿伸的,比方說,在根目錄下有一個(gè)變量i,而在它所屬的分身名稱為MC的電影剪輯中也有一個(gè)變量i,哪么它們之間會(huì)有沖突。但如果場(chǎng)景中有兩個(gè)電影剪輯分是是MC1和MC2,它們都在場(chǎng)景的根目錄下,屬于平級(jí),哪么它們當(dāng)中的變量i將不會(huì)起沖突。如果是這種情況,一部動(dòng)畫中共有兩個(gè)場(chǎng)景,Scene1和Scene2,兩個(gè)場(chǎng)景中分別有一個(gè)變量i的話,哪么也不會(huì)起沖突,場(chǎng)景是Flash動(dòng)畫中最大的實(shí)場(chǎng)面了,Scene1中的變量并不會(huì)在Scene2中存在的話,哪么說Flash動(dòng)畫中并沒有真正意義上的全局變量。但是沒有全局變量,F(xiàn)lash卻擁有真正意義上的局部變量,可以說每一個(gè)變量都是局部變量,它們只在自己的活動(dòng)范圍內(nèi)存在,它們只在自己的時(shí)間軸中起作用。它們會(huì)向自己的下一級(jí)路徑沿伸自己的作用,但如果在下一級(jí)電影剪輯的功能模塊里再次出現(xiàn)同名變量的話,可以使用var來定義局部變量,用var來定義的變量只在自己的代碼模塊中存在,離開自己的代碼模塊將不再起作用。這樣一來也不會(huì)與上一級(jí)的同名變量起沖突。使用var來定義專屬模塊的功能變量是一個(gè)非常提倡的做法,它對(duì)大型程序開發(fā)有獨(dú)特的幫助。
6.4 倒放
通過以上實(shí)例的制作會(huì)了解到不少實(shí)現(xiàn)幀跳轉(zhuǎn)和影片控制的方法,其實(shí)影片控制的概念就是幀跳轉(zhuǎn)。你也許已經(jīng)會(huì)制作下例的倒放控制了。但是如果只是停留在一種技術(shù)上沾沾自喜哪么就無法突破自己的技術(shù),真正技術(shù)高超的人都是在不斷的探索著前進(jìn)的道路,也許你已經(jīng)明白了控制影片播放的技術(shù),但也許你只是通過手動(dòng)學(xué)會(huì)了以上的這個(gè)實(shí)例。在以下這個(gè)倒放按鈕會(huì)與前幾種技術(shù)不同,但也有共通之處,原因在于所有的技術(shù),都是通過幀跳轉(zhuǎn)來達(dá)到控制,但是每一種實(shí)現(xiàn)方法的技術(shù)手段又都是不同的,每一種方法都讓我們領(lǐng)略了Action編程的多樣性力量。 步驟一、選擇主菜單中的Insert|New Symbol命令新建一個(gè)電影剪輯。取名為back,然后進(jìn)入這個(gè)電影剪輯編輯區(qū)。 步驟二、在第一幀雙擊鼠標(biāo)插入一個(gè)關(guān)鍵幀,雙擊此幀打開Action面板。雙擊Actions指令集當(dāng)中的if項(xiàng),使之出現(xiàn)在程序編輯區(qū)。在輸入欄內(nèi)輸入_root.n。 步驟三、然后雙擊Actions指令集中的evaluare指令,加入一個(gè)空白程序行,在輸入框內(nèi)輸入代碼_root.prevframe(),實(shí)現(xiàn)跳轉(zhuǎn)上一幀。完成如圖6-24。
圖6-24 完成跳轉(zhuǎn)上一幀
步驟四、在第二幀按F6插入一個(gè)關(guān)鍵幀。雙擊打開Action面板,輸入與第一幀完全相同的代碼。 步驟五、回到場(chǎng)景,在場(chǎng)景編輯區(qū)從Common Library共享庫面板中拖入一個(gè)倒放的按鈕。鼠標(biāo)右鍵點(diǎn)擊按鈕選擇Action打開按鈕的Action面板。 步驟六、在按鈕的Action面板中雙擊Actions指令集中的set variable給變量賦值。變量名為n,值為true,勾選Value輸入框后面的Expression單選框。完成如圖6-25所示。
圖6-25按鈕的完整指令
步驟七、從Library庫面板中把剛才制作的back電影剪輯拖入到場(chǎng)景中,在表示電影剪輯的小圓點(diǎn)上點(diǎn)擊右鍵,打開電影剪輯的Action面板。 步驟八、雙擊Actions指令集中的set variable為變量賦值。變量名為n,變量值為false,勾選后面的Expression單選框。系統(tǒng)會(huì)自動(dòng)加上OnClipEvent(load)指令,與按鈕的Action面板的中指令極為相似。此句的意思為當(dāng)幀裝載時(shí)變量n的值為假。完成如圖6-26所示。
圖6-26 電影剪輯的載入指令
步驟九、按Ctrl+Enter鍵測(cè)試。是不是也達(dá)到了倒放的效果呢?不過依然還是存在老問題,即當(dāng)動(dòng)畫播放到第一幀時(shí)會(huì)停止,并不出現(xiàn)回放。解決的辦法是像步退按鈕一樣的做法嗎?可以說是。但是請(qǐng)注意路徑的使用。步驟十、打開back電影剪輯,在第一幀雙擊打開Action面板。使第一行成為選取狀態(tài),然后雙擊Actions指令集中的if指令,使其出現(xiàn)在代碼編輯區(qū)。 步驟十一、在參數(shù)輸入欄中輸入代碼_root._currentframe<=1。然后再雙擊evaluare加入一個(gè)空行。輸入代碼_root.gotoandstop(_root._totalframes)。完成后請(qǐng)對(duì)照?qǐng)D6-27。
圖6-27 back電影剪輯的完整代碼
步驟十二、在第二幀上雙擊打開Action面板。操作與第一幀完全相同。按Ctrl+Enter鍵測(cè)試。整個(gè)動(dòng)畫的控制程序就制作完成了。將所有的按鈕進(jìn)行整合,然后測(cè)試完整的效果。你可以從中學(xué)到很多的東西。 程序解讀: 電影剪輯內(nèi)的指令:表示當(dāng)變量n等于真時(shí)開始根目錄播放上一幀,由于電影剪輯內(nèi)總是兩幀不斷的在循環(huán)。所以也會(huì)不斷的發(fā)出場(chǎng)景的幀回到上一幀產(chǎn)生倒放的效果,哪么變量n是哪兒來的呢? 電影剪輯加載指令:我們?cè)陔娪凹糨嬌宵c(diǎn)右鍵輸入的代碼意思為當(dāng)電影剪輯加載時(shí)變量n為假,這就是變量n的初始值。 按鈕內(nèi)的指令:很簡(jiǎn)單,當(dāng)點(diǎn)擊按鈕時(shí),對(duì)變量n重新賦值為真。激活電影剪輯內(nèi)的指令。 知識(shí)要點(diǎn): 此例使用變量的邏輯值來激活電影剪輯的效果,在以前各類程序中并不多見,變量的邏輯值其實(shí)可以用有和空來理解。當(dāng)真時(shí),表示有這個(gè)變量。為假時(shí)表示沒有。Flash中的變量是不需要指定屬性的,系統(tǒng)會(huì)自動(dòng)指定其為邏輯值還是字符串還是數(shù)值型,當(dāng)然你可以使用Number等轉(zhuǎn)換函數(shù)對(duì)變量?jī)?nèi)容進(jìn)行轉(zhuǎn)換。
出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色
上一頁 FLASH 5 教程 — Flash 影片控制 下一頁
◎進(jìn)入論壇Flash專欄版塊參加討論
|