古詩詞大全網 - 成語故事 - 關於flash的制作,急求~~~~~~!!!!!

關於flash的制作,急求~~~~~~!!!!!

參考代碼

var myLoading:MovieClip;

var loadInfo:MovieClip;

var _lineBgcolor = "0x666666";

var _lineColor = "0x0000FF";

var _lineLen:Number = 200;

var _lineH:Number = 3;

var _txtColor; var _txtAlign:String = "center";

var tb:Number;

var txtFormat:TextFormat = new TextFormat

("Arial", null, 0x000000, true); myLoading = _root.createEmptyMovieClip("myLoading",10); //進度條

loadInfo = myLoading.createEmptyMovieClip("line", 10);

loadInfo.lineStyle(1, _lineColor, 20);

loadInfo.moveTo(0, 0);

loadInfo.lineTo(_lineLen, 0);

loadInfo.lineTo(_lineLen, _lineH);

loadInfo.lineTo(0, _lineH);

loadInfo.lineTo(0, 0); //進度顯示文本

loadInfo.createTextField("txt", 30, 0, 0, _lineLen, 22);

loadInfo.txt.autoSize = _txtAlign; //設置進度條的位置(居中於主場景)

loadInfo._x = (Stage.width - _lineLen)/2;

loadInfo._y = Stage.height/2; //獲得影片大小並stop,再onEnterFrame

tb = _root.getBytesTotal();

_root.stop();

myLoading.onEnterFrame = function(){

var lb:Number = _root.getBytesLoaded();

var percent:Number = Math.round(lb/tb*100);

loadInfo.txt.text = percent+"%";

loadInfo.txt.setTextFormat(txtFormat);

loadInfo.lineStyle(_lineH, _lineBgcolor, 10);

loadInfo.moveTo(0, _lineH/2);

loadInfo.lineTo(percent*_lineLen/100, _lineH/2);

if (percent == 100) {

_root.play();

delete this.onEnterFrame;

loadInfo.clear();

loadInfo.txt.text = "";

}

網上

參考資料:

詳細的可以看壹下下面推薦的網址~~有圖例~~解說更明確

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秒鐘之後才會正式開始播放,不然只會在第壹幀與第二幀之間循環。

壹個簡單的Loading

壹個簡單的Loading制作並不需要很高深的編程基礎,而且大部份設計人員開始學習Flash腳本編程時都是從Loading開始學起的。也是因為制作Loading對於動畫傳播方面起著至關重要的作用。

步驟壹、打開Flash5,新建壹個文件。在影片的默認設置中背景色是白色的,動畫將以每秒十二幀的速度播放,這些妳可以通過點擊Modify|Movie命令打開Movie Properties對話框觀察到。如圖4-1所示。但是實踐告訴我們,使用影片默認設置制作的動畫,在網上瀏覽時,並不能很流暢,所以設計人員壹般喜歡把默認的每秒12幀更改的高壹點,這樣就可以在發布了以後觀看到比較流暢的動畫了。

圖4-1 Movie Properties對話框

步驟二、在影片的第壹幀,使用Window|Panels|Stroke命令打開Stroke筆觸面板,將筆觸的寬點拉桿拉到3,如圖4-2所示。

圖4-2 用Stroke面板改變筆觸粗細

步驟三、點擊繪圖面板中的方形繪圖工具。在繪圖面板Colors項上面的油漆桶工具中把色彩選為紅色。然後在場景中繪制出壹個長方形,如圖4-3所示。

圖4-3 繪制壹個長方形進度條

步驟四、在編輯區內用鼠標點擊長方形的紅色處,妳會發現色彩出現了很多小麻點,已經處於了被選取狀態。

步驟五、點擊Insert|Convert to Symbol,將紅色長方形轉換為符號,在隨後打開的Symbol Properties對話框中的Name輸入框輸入符號的名稱為Loading。然後選擇Movie Clip電影剪輯項,點擊OK。

步驟六、現在點擊紅色長方形妳會發現它已經不再出現小麻點了,而是出現了壹個藍色的外框,因為它已經是壹個符號了。現在選Window|Panels|Instance命令打開Instance實例面板。

步驟七、在面板中的Name項中輸入名稱Loading,為這個符號取了壹個分身名稱。如圖4-4所示。

圖4-4 為進度條符號取分身名稱

步驟八、在時間軸的第二幀按F6鍵,插入壹個關鍵幀。

步驟九、用鼠標雙擊此幀打開幀的Action面板。我們要開始制作預載動畫的程序了。

步驟十、雙擊Action面板左邊的指令裏的Actions項,在打開的指令裏選擇if,用鼠標又擊,if指令出現在編輯區了。

步驟十壹、在Action面板的下半部份參數輸入區裏Condition輸入欄中輸入代碼_framesloaded>=_totalframes。如圖4-5所示。

圖4-5 在if指令參數框內輸入代碼

步驟十二、然後點擊指令區的Basic Actions命令集裏的goto指令,在隨後的參數輸入框內的Frame欄目中輸入數字3。如圖4-6所示。

圖4-6 goto指令的參數輸入欄

步驟十三、然後點擊 Actions指令集中的else項。

步驟十四、再次點擊goto指令,這回不用更改幀序列數字了。

步驟十五、點擊Action指令集的Setproperty指令,選擇Properties下拉框中的_xscale屬性,然後在Target輸入欄中輸入“_root.loading",點選後面的Expression單選框項目。

步驟十六、在Value輸入欄中輸入代碼(_framesloaded/_totalframes)*100,點選後面的Expression單選框。

圖4-7 Setproper指令參數輸入框

步驟十七、指令已經輸入完畢了。接下來開始在第三幀後面制作妳的動畫,然後發布,上傳,觀看。妳也可以打開Control|Debug Movie測試電影,在隨後打開的瀏覽窗口中使用Debug菜單中的模擬下載速度來測試。

程序解讀:

第1-2行中if(_framesloaded>=_totalframes)句的意思是當已經下載的幀數大於等於影片的總幀數時,跳轉到第三幀開始播放。

第3-5行,如果下載的幀數小於總幀數的話,跳轉到第壹幀播放。並且安裝分身名稱為loading的電影剪輯的長度屬性,使它的長度成為已經下載的幀數除以總幀數再乘100。

知識要點:

Loading制作很多設計人員喜歡使用幀行為,其實用很多的功能都可以實現Loading制作。本例中使用(_framesloaded/_totalframes)*100的表達式來制作進度條的寬度。其它Loading制作方法不管是用下載時間函數還是用下載字節函數,但下載數除以總數乘以100的表達式基本上是沒什麽變化的了。

精確的Loading設計

上述的哪個Loading程序有壹些比較簡單,雖然它已經達到了預載的效果,但是對於要求比較高的朋友可能就不能滿足了。哪麽請看圖4-8,這個預載動畫將使用到比較多的函數,使動畫預載看起來更加的人性化。

圖4-8 高級的Loading程序界面

制作過程:

步驟壹、打開剛才我們設計的Loading動畫。這個Loading程序將是在上述Loading的基礎上修改而成的。

步驟二、使用文字工具,並且使用Window|Panels|Character命令,打開Character字符面板,將字號設置為25,字色為黑色。如圖4-9所示。

圖4-9 Character面板的設置

步驟三、將文字按圖4-8這樣式輸入在界面裏。然後打開Window|Panels|Align命令,打開Align對齊面板。

步驟四、使用其中的對齊方式將文字對齊成圖4-8之樣式。

步驟五、點擊文字工具,在總字節的文字後面用鼠標拖出壹個文本框,註意用調節點調節文本框的寬度。然後打開Window|Panels|Text Options命令打開Text Options文本屬性面板,在下拉菜單中選擇Dynamic Text打開動態文本設置框。

步驟六、在動態文本框的Variable項輸入這個文本框的變量為zbye,如圖4-10所示。

圖4-10 動態文本面板中設置動態文本變量

步驟七、用同樣的方法在繪制七個動態文本框在各字符的後面。已經下載字節後面的字段變量為yby,總幀數的為zfrm,已下載幀數的是yfrm,需要的時間後面變量名為xtim,已用時間的為ytim,在進度條下方的下載進度變量為yload。

步驟八、設置完畢開始進行程序設計。打開第二幀的Action面板,妳可以看到我們剛才設計的程序。在這個程序中有很多的內容無需改變,只要再添加壹些程序就可以了。

步驟九、我們將Setproperty("_root.loading",_xscale,(_framesloaded/_totalframes)*100這句用鼠標拖動上移壹行,在指定區的Actions指令集中選擇Set Variable指令。

步驟十、在打開的變量輸入框中,Variable項填寫總幀數的字段變量zby,在Value欄中輸入代碼_root.getbytestotal(),勾選後面的Expression單選框。

圖4-11 變量輸入框

步驟十壹、用同樣的方法輸入其它變量。yby=_root.getbytesloaded()。

步驟十二、zfrm = _root._totalframes。

步驟十三、yfrm = _root._framesloaded。

步驟十四、ytim=gettime()/1000 + "秒"。

步驟十五、xtim = int(zby-yby)/yby*tim) + "秒"。

步驟十六、yload = _framesloaded/_totalframes*100。

步驟十七、整個程序輸入結束。對照參考圖4-12。

圖4-12 高級Loading的完整程序

程序解讀:

這前幾行程序基本上不用解讀,哪些都是Action中所擁有的函數,只要將本章開始時的函數學習好,把它們賦值給變量就可以了。

第十行,用了壹個表達式來獲得了還需要的時間變量值。總字節減去已經下載的字節的值除以已下載的字節再乘以已經使用的時間。

第十壹行,用已經下載的幀數除以總幀數再乘以100得到下載進度,其實這行程序還可以變化為yfrm/zfrm*100。

知識要點:

高級Loading其實制作起來也並不復雜,妳可以通過對函數的了解來做到。另外這裏有壹個概念,getbytesloaded和另外幾個函數都是Movie Clip的函數,為什麽也可以在場景中使用呢?其實妳可以把場景看成是壹個大的Movie Clip,很多電影剪輯的函數都可以使用在場景中,包括gettimer()。而動態文本變量正是去顯示這些函數的數值的,其實在Loading中還有壹個概念,就是利用幀循環也可以達到循環效果,與壹般的編程不同的是Flash可以使用幀循環去達到壹些效果,有時候因為幀循環的時間特性,做出的循環比用while等循環語句構造出更加意想不到的效果。學習好這些函數正是高級Loading制作的關鍵。