我們說(shuō)過(guò),F(xiàn)lash制作的多媒體網(wǎng)站是Flash動(dòng)畫(huà)制作的精髓,也是Flash動(dòng)畫(huà)最為廣泛的用途。在Flash出現(xiàn)以前,網(wǎng)站設(shè)計(jì)是靜態(tài)的和Gif動(dòng)畫(huà)的天下。當(dāng)然還有JavaApplet和JavaScript等眾多技術(shù)。但這些技術(shù)的應(yīng)用范圍并不廣泛。網(wǎng)絡(luò)帶寬也是影響網(wǎng)絡(luò)多媒體發(fā)展的一個(gè)瓶徑。但Flash出現(xiàn)了。它帶給網(wǎng)絡(luò)全新的意義,帶給網(wǎng)絡(luò)互動(dòng)的媒體,使網(wǎng)絡(luò)交互多媒體成為可能,成為現(xiàn)實(shí)。三年前當(dāng)我們?yōu)g覽國(guó)外的網(wǎng)站榜評(píng)時(shí),還主要是停留在一些平面設(shè)計(jì)作品上,但是現(xiàn)在國(guó)外的榜評(píng)已經(jīng)擁有了很多的互動(dòng)多媒體動(dòng)畫(huà)網(wǎng)站。Flash發(fā)展的速度由此可見(jiàn)。IE瀏覽器在6.0版本中已經(jīng)內(nèi)置了Flash Player播放器,似乎在預(yù)示著網(wǎng)站制作的發(fā)展道路。讓我們一起來(lái)領(lǐng)略互動(dòng)的魅力。
Loading 預(yù)載動(dòng)畫(huà)程序設(shè)計(jì)
Loading網(wǎng)頁(yè)預(yù)載程序是網(wǎng)頁(yè)動(dòng)畫(huà)中的一個(gè)關(guān)鍵,因?yàn)榧幢闶荈lash生成的文件很小,但是制作出的大型動(dòng)畫(huà)對(duì)于使用調(diào)制解調(diào)器的用戶(hù)速度還是需要解決的。如果沒(méi)有一個(gè)預(yù)載的過(guò)程,只怕動(dòng)畫(huà)觀看起來(lái)也不會(huì)很流暢。特別是在動(dòng)畫(huà)中加入了大量的聲音和圖像的動(dòng)畫(huà)沒(méi)有了Loading將不會(huì)流暢的展現(xiàn)在我們眼前。 在此之前先學(xué)習(xí)一下在這章將要出現(xiàn)的屬性與函數(shù)。如果由于例中使用了沒(méi)有接觸過(guò)的函數(shù)和屬性,請(qǐng)先照例制作,等在以后的章節(jié)中學(xué)習(xí)了相關(guān)的其它函數(shù)后回過(guò)頭來(lái)再看的話(huà),就會(huì)完全明白例子中的作用。
◆ _framesloaded
_framesloaded是電影剪輯的屬性,用來(lái)獲取電影剪輯中的已經(jīng)下載的幀數(shù),當(dāng)然大部的應(yīng)用于電影剪輯的屬性都可以應(yīng)用于整部動(dòng)畫(huà)。此屬性只能用來(lái)獲取。 if(_root.mc._framesloaded>100){ _root.gotoandplay(1) } 此例子在普通模式下輸入將成為: if(getproperty("_root.mc",_framesloaded)>100){ gotoandplay(1) } 普通模式中對(duì)屬性的獲取將使用getproperty函數(shù),但此函數(shù)在新的.語(yǔ)法的使用中并非最佳,在以下的例子中將不再引用。此例中以獲得電影剪輯已經(jīng)下載的幀數(shù)大于100時(shí),開(kāi)始返回場(chǎng)景重新播放。這也是在網(wǎng)站制作中一個(gè)比較典型的例子,很多的電影剪輯因?yàn)轶w積問(wèn)題,在“流”式播放過(guò)程中不會(huì)很流暢。而下例將是一個(gè)錯(cuò)誤的例子。 _root.mc._framesloaded=100; _root.gotoandplay(1); 在編程中將不允許對(duì)_framesloaded屬性進(jìn)行賦值,如果你想當(dāng)下載的幀數(shù)等于100時(shí)根目錄開(kāi)始回放的話(huà),請(qǐng)按下例制作。 if(_root.mc._framesloaded=100){ _root.gotoandplay(1); }
◆ _totalframes
_totalframes屬性是用來(lái)獲取電影剪輯實(shí)體的總幀數(shù)。也可以用來(lái)獲取動(dòng)畫(huà)的總幀數(shù)。在下例中會(huì)看到它的用法。 i=_root.mc._totalframes; if(_root.cuttentframes=i); _root.stop(); } 程序中將電影剪輯實(shí)體的總幀數(shù)賦值賦予了變量i,而當(dāng)主場(chǎng)景的動(dòng)畫(huà)播放指針播放到與電影剪輯中的總幀數(shù)相同的數(shù)目時(shí),動(dòng)畫(huà)停止播放。此屬性同樣為非賦值屬性。
◆ ifFramesloaded
ifFramesloaded函數(shù)也是用來(lái)獲取已經(jīng)下載的幀數(shù)的,與_framesloaded不同的是它用于一個(gè)簡(jiǎn)單的行為來(lái)描述已下載的幀數(shù)。而且此函數(shù)似乎是專(zhuān)為L(zhǎng)oading設(shè)計(jì),它位于Basic Actions指令集,指令名稱(chēng)為If Frames Is Loaded。以下實(shí)例將構(gòu)成一個(gè)最為簡(jiǎn)單的Loading。 ifFrameLoaded(_totalframes){ gotoandplay(3); }else{ gotoandplay(1); } 將此程序加于影片的第二幀,可用于所有動(dòng)畫(huà)的預(yù)載技術(shù)。意思為當(dāng)裝入的幀數(shù)為總幀數(shù)時(shí)開(kāi)始播放第三幀,如果不然,播放第一幀。在Flash5以后開(kāi)始使用更多的函數(shù)和屬性,所以此函數(shù)不推薦使用。
◆ getBytesLoaded()
getBytesLoaded()為獲取電影剪輯實(shí)體的已下載字節(jié)數(shù),如果是外部動(dòng)畫(huà)將返回動(dòng)畫(huà)的總字節(jié)數(shù)。GetBytesLoaded用于更加精確的Loading設(shè)計(jì),因?yàn)樗⒉幌馹framesloaded屬性是獲取影片的總幀數(shù),而是以字節(jié)做為單位獲取。如果說(shuō)動(dòng)畫(huà)的最后一幀將是一個(gè)大型的圖像或是聲音角色的話(huà),哪么_framesloaded所獲得的百分比將不準(zhǔn)確,getBytesLoaded有效的彌補(bǔ)了此方面的不足。例: i=_root.getBytesTotal(); if(_root.getBytesLoaded()>=1000000){ n=_root.getBytesLoaded(); if(n<=i/4){ _root.stop(); trace("下載了1M,還不到四分之一,動(dòng)畫(huà)太大,下載時(shí)間會(huì)很長(zhǎng),是否繼續(xù)?") } } 此句的意思為當(dāng)動(dòng)畫(huà)下載到1MB時(shí),比較是否已經(jīng)下載了動(dòng)畫(huà)的四分之一,如果是,停止動(dòng)畫(huà)的播放,在調(diào)試窗口顯示“下載了1M,..."等字符串,根據(jù)動(dòng)畫(huà)中的其他行為判斷是否繼續(xù)播放。此例的另一特點(diǎn)是,停止的地方如果有插入電影剪輯的話(huà),電影剪輯將不會(huì)停止播放。也可以通過(guò)動(dòng)態(tài)文本顯示已經(jīng)下載的文字?jǐn)?shù),假設(shè)在動(dòng)畫(huà)的主場(chǎng)景中有一個(gè)變量名為text的動(dòng)態(tài)文本變量,哪么例: _root.text=_root.getBytesLoaded(); if(_root.getBytesLoaded()>=_root.getBytesTotal()){ gotoandplay(3); }else{ gotoandplay(1); } 動(dòng)態(tài)文本框會(huì)動(dòng)態(tài)顯示已經(jīng)下載的字節(jié)數(shù)為觀眾服務(wù)。觀眾也會(huì)了解在動(dòng)畫(huà)的下載過(guò)程中動(dòng)態(tài)的進(jìn)度了。
◆ getBytesTotal()
getBytesTotal()函數(shù)是用來(lái)獲取動(dòng)畫(huà)或是電影剪輯的總字節(jié)數(shù),當(dāng)然我們可以通過(guò)對(duì)文件的大小來(lái)觀察動(dòng)畫(huà)的總字節(jié)數(shù),但對(duì)于網(wǎng)絡(luò)上使用瀏覽器的觀眾來(lái)說(shuō),動(dòng)態(tài)顯示文件大小是很有必要的。還有,如果想觀察動(dòng)畫(huà)中電影剪輯的體積就只有靠getBytesTotal()函數(shù)了。 If(_root.getBytesTotal()>=1000000){ _root.stop(); } 這個(gè)程序的意思是當(dāng)動(dòng)畫(huà)的總字節(jié)超過(guò)1M時(shí)停止動(dòng)畫(huà)播放。
◆ gettimer()
gettimer()函數(shù)用來(lái)獲取電影剪輯或是動(dòng)畫(huà)的已經(jīng)播放時(shí)間數(shù),此函數(shù)并不僅僅應(yīng)用于Loading的制作,在今后的學(xué)習(xí)過(guò)程中還會(huì)接觸到它。在Flash5的對(duì)動(dòng)畫(huà)播放時(shí)間的控制上會(huì)有g(shù)ettimer()函數(shù)大顯身手的舞臺(tái)。但gettimer()函數(shù)獲取的時(shí)間是以毫秒做為計(jì)算單位的,一般在程序制作過(guò)程中還會(huì)對(duì)它除以一千來(lái)取得秒,這樣更加符合對(duì)于時(shí)間播放程序的顯示。假設(shè)動(dòng)畫(huà)中有一個(gè)text的動(dòng)態(tài)文本框變量。例: text=gettimer()/1000; 通過(guò)幀循環(huán)或是其它的誅如OnClipEvent(enterframe)等行為的控制會(huì)動(dòng)態(tài)的顯示動(dòng)畫(huà)播放的時(shí)間過(guò)程。又例如: text=gettimer()/1000; if(text>=10){ gotoandstop(3); }else{ gotoandplay(1); } 假設(shè)此程序位于動(dòng)畫(huà)的主場(chǎng)景的第二幀。那么當(dāng)開(kāi)始播放10秒鐘之后才會(huì)正式開(kāi)始播放,不然只會(huì)在第一幀與第二幀之間循環(huán)。
出處:藍(lán)色理想
責(zé)任編輯:qhwa
上一頁(yè) 下一頁(yè) 簡(jiǎn)單的loading 設(shè)計(jì)
◎進(jìn)入論壇Flash專(zhuān)欄版塊參加討論
|