我是一個.NET的程序員,起先由於公司的需要,不得不學習Action Script。當時情況很糟,專案來了,迫在眉睫,但是公司捨不得出錢請個AS的程序員(AS的程序員要價總是太高),我只能一邊學習,一邊做專案,幸好Action Script 3.0的面向對象的,這讓我感覺也不太難懂,經過一段時間學習,慢慢對於Flash的理解要稍稍多了一些,不知不覺,公司又接了幾個Flash的專案,感覺都還能勝任。不過,直到昨天,我才明白Flash的loading的含義。
以下言論是我自身的理解,不保證100%正確,如有謬誤,還請指出,並見諒。
你是否曾經被要求把Flash做到加載幾KB就要顯示呢,如果有,並且你不知道如何解決的話,請繼續向下看;如果您是高手,並且也有興趣的話,也請繼續,並在適當的時候指出我的我的錯誤。
Flash要顯示內容,至少得等第一影格下載完畢,很簡單吧。
不過,你是否清楚你的第一影格有多大呢?如果你說你的第一影格很小,因為你留的是一個空白的影格,那不一定。現在我的這個專案的Flash裡,做了很多的linkage,您可能明白了,Action Script導入的那一影格不管是不是空白,都是可以很大,所以,在我們經典論壇的Flash版塊裡總是會看到版主說,做loading用三影格,第一影格loading,第二影格導出腳本,第三影格開始程序……
但是為什麼要這樣做呢?
您還記得Flash至少要加載第一影格才能顯示的道理吧,所以,要盡快的顯示Flash的loading,要盡量減小第一影格的大小,把loading的邏輯寫在第一影格,將Action Script導出在第二影格,這樣,導出的內容就影響不到你,最後,你會在第三影格,也就是加載完成後,開始主程序邏輯。
在Flash的publish settings(快捷鍵Ctrl+Shift+F12),選擇"Flash"選項卡,點擊"Script"的那個"settings",把"Export class in frame 1"改成"Export class in frame 2",這樣,你的程序的類會導出到第二影格,它不會把第一影格(loading所在的影格)變大,從而進快顯示loading。
看看效果吧,在publish settings中,把"Generate size report"勾選,看看發佈後flash文件的體積報告:
Frame # Frame Bytes Total Bytes Scene
1 23892 23892 Main Scene
2 155519 179411 (AS 3.0 Classes Export Frame)
3 36 179447
而把Action Script發佈到第一影格呢:
Frame # Frame Bytes Total Bytes Scene
1 106125 106125 Main Scene (AS 3.0 Classes Export Frame)
2 70771 176896
3 36 176932
你看,如果導出到第二影格,第一影格的體積大約是24KB,這是因為loading動畫效果有這樣大的體積;而如果將AS發佈到第一影格,則變成了106KB,主要的加載內容都在第一影格了,這說明這個loading就比較失敗 。
另外,你可能還會遇到這樣的問題:當你辛苦的為你的loading寫了一個類,叫myFlashAppPreLoader,在第一影格時,你是這樣寫的:
(帶有一點點
語法高亮的版本,希望不要當AD,這個位置什麼也沒有的,AD它也沒用 )

程序代碼
//private variables
private var loader:myFlashAppPreLoader;
……
//constructor
loader=new myFlashAppPreLoader();
this.addChild(loader);
this.loaderInfo.addEventListener(Event.COMPLETE,loadCompetedHandler);
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,LoadingHandler);
……
//some other function
private function loadCompetedHandler(e:Event) {
this.removeChild(loader);
}
你這樣做的原因在於,你想把loading封裝成一個類,你直接用就好了,方便!
可是,這樣帶來一個極大的問題:
試想,你剛剛把AS導出在第二影格了,現在你的第一影格是loading,第一影格就用第二影格的東西……邏輯不太對吧?
所以,在第一影格的loading裡,不要把loading寫成類,請直接在舞台的第一影格裡放loading的動畫,對,把它們通通放到舞台上,這樣,你可以直接在document class中對其中進行操作,想要什麼動畫也可以自行控制了。

程序代碼
//constructor
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,LoadingHandler);
……
//loading animation handler
private function LoadingHandler(e:ProgressEvent):void {
txtProgress.text=String(Math.round(e.bytesLoaded/e.bytesTotal*100));
}
這裡的txtProgress就是舞台上一個DynamicTextField的實例名稱,我直接用它賦一個百分比的值,如果你loading的時候要控制更多的元件,也可以同樣這樣做。
末尾的時候,提醒大家多留意一個size report,這裡面不但可以看到影格的體積情況,還可以看到圖形、元件、嵌入字體等的大小,對分析你的Flash用處多多哦。
文章來自: 藍色論壇