Sunday, August 3, 2008

ActionScript 3.0 寫Flash的載入功能

我時常寫出一些很肥的Flash作品,於是做一些Loading的畫面就變得很重要,每一代的ActionScript都有不一樣的Loading方式, 以下是在PTT上面的Flash討論版的強者cjcat2266告訴我的,我在這邊留個筆記,以免我下次忘了怎麼用…



以下大量引用原作者cjcat2266的句子



基本上,任何需要載入(無論是外部或者內部)的元件(包括.swf檔案)被載入者(content)與載入者(loader)之間一定會有個LoaderInfo物件存在,LoaderInfo是個EventDispatcher,一切載入的相關數據都由它的事件提供,以下是兩個常用的Loading方式:



1. 載入寫在主程式第一格



  →相當於stage是loader,.swf本身是content



        所以第一格就這樣寫:


                this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, p);
                this.loaderInfo.addEventListener(Event.COMPLETE, c);
                function p(e:ProgressEvent):void {
                        //載入條的長度
                        loadingBar_mc.scaleX = e.bytesLoaded / e.bytesTotal;
                }
                function c(e:Event):void {
                        //載入完成之後想要做的事情
                }



2.用一個.swf載入另外一個.swf



  →相當於載入者裡面的Loader物件是loader,被載入的.swf則是content



        寫法大概是這樣:



                var loader:Loader = new Loader();
                loader.contentLoaderInfo.addEevntListener(
                                             ProgressEvent.PROGRESS, p);
                loader.contentLoaderInfo.addEventListener(
                                             Event.COMPLETE, c);
                //載入外部.swf               
                loader.load(new URLRequest("content.swf"));
                function p(e:ProgressEvent):void {
                        //載入條的長度
                        loadingBar_mc.scaleX = e.bytesLoaded / e.bytesTotal;
                }
                function c(e:Event):void {
                        //載入完成之後想要做的事情
                        //通常是將載入進來的content加到display list上面
                        addChild(e.content);
                }



如果compile的時候出現什麼錯誤,通常是因為還沒載入那個事件類別,例如我就是先import flash.events.ProgressEvent; 才能夠正常的執行這個Loading的程序。

2 comments:

beeru said...

何時會有新作品呢?

很期待~

beeru said...

sorry~最近要吃枸杞補一下眼睛

找到新作了!