快速連結

2010年10月19日

載入子swf檔案時產生進度條

當父swf檔案要Load子swf檔案,需要顯示Loading的進度條。

以下是較為簡略的寫法──



這是主要Load子SWF檔案的程式:

package {
 import flash.display.*;
 import flash.events.*;
 import flash.net.URLRequest;

 public class _loading extends Sprite{
  
  var scene:*;
  var loadingbar:MovieClip;
  var _ldr:Loader = new Loader();

  public function _loading(){loadSwf();}

  function loadSwf(){
   _ldr.load(new URLRequest("test.swf"));
   _ldr.contentLoaderInfo.addEventListener(Event.COMPLETE , loadGameComplete,false, 0, true);
   loadingbar = new _LoadBar();
   loadingbar.setLoader(LoaderInfo(_ldr.contentLoaderInfo));
   
  }
   
  function loadGameComplete(e:Event):void {
   scene= _Ldr.content;
   _ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE , loadGameComplete);
  }
 }
}

這是進度條的程式:

package {
 import flash.display.*;
 import flash.events.*;

 public class _LoadBar extends MovieClip{

  var linf:LoaderInfo = null;

  public function _LoadBar(){init();}

  public function init() {
   this.scaleX = 0;
   addEventListener(Event.ENTER_FRAME, LoadingNow, false, 0, true);
  }
  public function setLoader(loads:LoaderInfo) {
   linf = loads;
  }
  
  function LoadingNow(e:Event){
   var percent:Number=0;
   if (linf!=null && linf.bytesTotal != 0){percent = linf.bytesLoaded/linf.bytesTotal;}
   loadbar.scaleX = percent;
   if (percent >=1) LoadOver();
  }
  
  function LoadOver(){
   removeEventListener(Event.ENTER_FRAME, LoadingNow);
  }
 }
}

基本上其實要混用ProgressEvent才能達到更好的效果,因為LoaderInfo要在Event.COMPLETE之後才會有資料,否則LoaderInfo只是個null。
但我不用ProgressEvent的原因在於...我一直無法取得ProgressEvent.PROGRESS監聽事件的運行...

五月份補充說明:
已經知道ProgressEvent.PROGRESS監聽事件的運行方法了:

  var ldr:Loader = new Loader();
  ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadingEvent);
  

  function loadingEvent(e:ProgressEvent){
    trace("正在讀取中哦~"); 
 }

沒有留言:

張貼留言

歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT