Loading 預載動畫程式設計

來源:互聯網
上載者:User
loading|程式|設計

我們說過,Flash製作的多媒體網站是Flash動畫製作的精髓,也是Flash動畫最為廣泛的用途。在Flash出現以前,網站設計是靜態和Gif動畫的天下。當然還有JavaApplet和JavaScript等眾多技術。但這些技術的應用範圍並不廣泛。網路頻寬也是影響網路多媒體發展的一個瓶徑。但Flash出現了。它帶給網路全新的意義,帶給網路互動的媒體,使網路互動多媒體成為可能,成為現實。三年前當我們瀏覽國外的網站榜評時,還主要是停留在一些平面設計作品上,但是現在國外的榜評已經擁有了很多的互動多媒體動畫網站。Flash發展的速度由此可見。IE瀏覽器在6.0版本中已經內建了Flash Player播放器,似乎在預示著網站製作的發展道路。讓我們一起來領略互動的魅力。

Loading 預載動畫程式設計

Loading網頁預載程式是網頁動畫中的一個關鍵,因為即便是Flash產生的檔案很小,但是製作出的大型動畫對於使用數據機的使用者速度還是需要解決的。如果沒有一個預載的過程,只怕動畫觀看起來也不會很流暢。特別是在動畫中加入了大量的聲音和映像的動畫沒有了Loading將不會流暢的展現在我們眼前。
在此之前先學習一下在這章將要出現的屬性與函數。如果由於例中使用了沒有接觸過的函數和屬性,請先照例製作,等在以後的章節中學習了相關的其它函數後回過頭來再看的話,就會完全明白例子中的作用。

◆ _framesloaded

_framesloaded是電影剪輯的屬性,用來擷取電影剪輯中的已經下載的幀數,當然大部的應用於電影剪輯的屬性都可以應用於整部動畫。此屬性只能用來擷取。
if(_root.mc._framesloaded>100){
   _root.gotoandplay(1)
}
此例子在普通模式下輸入將成為:
if(getproperty("_root.mc",_framesloaded)>100){
   gotoandplay(1)
}
普通模式中對屬性的擷取將使用getproperty函數,但此函數在新的.文法的使用中並非最佳,在以下的例子中將不再引用。此例中以獲得電影剪輯已經下載的幀數大於100時,開始返回情境重新播放。這也是在網站製作中一個比較典型的例子,很多的電影剪輯因為體積問題,在“流”式播放過程中不會很流暢。而下例將是一個錯誤的例子。
_root.mc._framesloaded=100;
_root.gotoandplay(1);
在編程中將不允許對_framesloaded屬性進行賦值,如果你想當下載的幀數等於100時根目錄開始回放的話,請按下例製作。
if(_root.mc._framesloaded=100){
    _root.gotoandplay(1);
}

◆ _totalframes

_totalframes屬性是用來擷取電影剪輯實體的總幀數。也可以用來擷取動畫的總幀數。在下例中會看到它的用法。
i=_root.mc._totalframes;
if(_root.cuttentframes=i);
_root.stop();
}
程式中將電影剪輯實體的總幀數賦值賦予了變數i,而當主情境的動畫播放點播放至與電影剪輯中的總幀數相同的數目時,動畫停止播放。此屬性同樣為非賦值屬性。

◆ ifFramesloaded

ifFramesloaded函數也是用來擷取已經下載的幀數的,與_framesloaded不同的是它用於一個簡單的行為來描述已下載的幀數。而且此函數似乎是專為Loading設計,它位於Basic Actions指令集,指令名稱為If Frames Is Loaded。以下執行個體將構成一個最為簡單的Loading。
ifFrameLoaded(_totalframes){
   gotoandplay(3);
}else{
   gotoandplay(1);
}
將此程式加於影片的第二幀,可用於所有動畫的預載技術。意思為當裝入的幀數為總幀數時開始播放第三幀,如果不然,播放第一幀。在Flash5以後開始使用更多的函數和屬性,所以此函數不推薦使用。

◆ getBytesLoaded()

getBytesLoaded()為擷取電影剪輯實體的已下載位元組數,如果是外部動畫將返回動畫的總位元組數。GetBytesLoaded用於更加精確的Loading設計,因為它並不像_framesloaded屬性是擷取影片的總幀數,而是以位元組做為單位擷取。如果說動畫的最後一幀將是一個大型的映像或是聲音角色的話,哪麼_framesloaded所獲得的百分比將不準確,getBytesLoaded有效彌補了此方面的不足。例:
i=_root.getBytesTotal();
if(_root.getBytesLoaded()>=1000000){
    n=_root.getBytesLoaded();
    if(n<=i/4){
        _root.stop();
        trace("下載了1M,還不到四分之一,動畫太大,下載時間會很長,是否繼續?")
    }
}
此句的意思為當動畫下載到1MB時,比較是否已經下載了動畫的四分之一,如果是,停止動畫的播放,在調試視窗顯示“下載了1M,..."等字串,根據動畫中的其他行為判斷是否繼續播放。此例的另一特點是,停止的地方如果有插入電影剪輯的話,電影剪輯將不會停止播放。也可以通過動態文本顯示已經下載的文字數,假設在動畫的主情境中有一個變數名為text的動態文本變數,哪麼例:
_root.text=_root.getBytesLoaded();
if(_root.getBytesLoaded()>=_root.getBytesTotal()){
    gotoandplay(3);
}else{
    gotoandplay(1);
}
動態文字框會動態顯示已經下載的位元組數為觀眾服務。觀眾也會瞭解在動畫的下載過程中動態進度了。

◆ getBytesTotal()

getBytesTotal()函數是用來擷取動畫或是電影剪輯的總位元組數,當然我們可以通過對檔案的大小來觀察動畫的總位元組數,但對於網路上使用瀏覽器的觀眾來說,動態顯示檔案大小是很有必要的。還有,如果想觀察動畫中電影剪輯的體積就只有靠getBytesTotal()函數了。
If(_root.getBytesTotal()>=1000000){
_root.stop();
}
這個程式的意思是當動畫的總位元組超過1M時停止動畫播放。

◆ gettimer()

gettimer()函數用來擷取電影剪輯或是動畫的已經播放時間數,此函數並不僅僅應用於Loading的製作,在今後的學習過程中還會接觸到它。在Flash5的對動畫播放時間的控制上會有gettimer()函數大顯身手的舞台。但gettimer()函數擷取的時間是以毫秒做為計算單位的,一般在程式製作過程中還會對它除以一千來取得秒,這樣更加符合對於時間播放程式的顯示。假設動畫中有一個text的動態文字框變數。例:
text=gettimer()/1000;
通過幀迴圈或是其它的誅如OnClipEvent(enterframe)等行為的控制會動態顯示動畫播放的時間過程。又例如:
text=gettimer()/1000;
if(text>=10){
    gotoandstop(3);
}else{
    gotoandplay(1);
}
假設此程式位於動畫的主情境的第二幀。那麼當開始播放10秒鐘之後才會正式開始播放,不然只會在第一幀與第二幀之間迴圈。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。