AS3 制作Loading加载进度条

2011-06-08 13:58:41 by 【6yang】, 162 visits, 收藏 | 返回

在 学习AS2的时候,做LOADING有很多种方法,做起来也得心应手。但是到AS3的时候做LOADING的时候却无从下手,抓瞎了几天。因为在AS3中 引入了一个全新的类LoaderInfo,这个类可作用于任何的可显示对象(display object),这个对象里包含了加载过程检测、加载地址、加载对象的内容、加载对象总字节数(和加载过程中的字节数)、加载对象的宽度高度等等非常多的 内容。

有2种方式可以访问LoaderInfo对象:

  1. 访问flash.display.Loader对象的contentLoaderInfo属性;
  2. 任何一个可显示对象(display object)都有loaderInfo属性;

 

注意:每个SWF文档的主类的实例有loaderInfo属性,每个Loader有loaderInfo属性,同时它有一个contentLoaderInfo属性,通过这个属性你可以访问到Loaded对象的loaderInfo。

下面还来例子示范。

首先来一个loading外部文件的例子:

view plaincopy to clipboardprint?

 

  1. var request:URLRequest = new URLRequest("flashrek.swf");   
  2. var loader:Loader = new Loader();   
  3.   
  4. loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);   
  5. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);   
  6.   
  7. function loadProgress(event:ProgressEvent):void {   
  8.      var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;   
  9.      percentLoaded = Math.round(percentLoaded * 100);   
  10.      trace("Loading: "+percentLoaded+"%");   
  11. }   
  12.   
  13. function loadComplete(event:Event):void {   
  14.      trace("Complete");   
  15. }   
  16.   
  17. loader.load(request);   
  18. addChild(loader);  

 

var request:URLRequest = new URLRequest("flashrek.swf");var loader:Loader = new Loader();loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);function loadProgress(event:ProgressEvent):void { var percentLoaded:Number = event.bytesLoaded/event.bytesTotal; percentLoaded = Math.round(percentLoaded * 100); trace("Loading: "+percentLoaded+"%");}function loadComplete(event:Event):void { trace("Complete");}loader.load(request);addChild(loader);

这里要注意loader的load方法只接受URLRequest对象作为参数;另外就是ProgressEvent类,比较简单,看帮助就好了。

这里只是LOAD外部对象,如何做自身LOADING还要再研究研究,等有了答案再更新。

更新自身Loading

view plaincopy to clipboardprint?

 

  1. stop();   
  2. import flash.display.LoaderInfo;   
  3. import flash.events.ProgressEvent;   
  4. import flash.text.TextField;   
  5. var loadText:TextField=new TextField();   
  6. addChild(loadText);   
  7. this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,myloadmovie);   
  8. this.loaderInfo.addEventListener(Event.COMPLETE,myover);   
  9. function myloadmovie(event:ProgressEvent):void {   
  10.      var hl:Number=event.bytesLoaded/event.bytesTotal;   
  11.      var n:Number=Math.round(hl*100);   
  12.      loadText.text=n+"%";   
  13. }   
  14. function myover (event:Event):void {   
  15.      this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS,myloadmovie);   
  16.      nextFrame();   
  17. }  

 

stop();import flash.display.LoaderInfo;import flash.events.ProgressEvent;import flash.text.TextField;var loadText:TextField=new TextField();addChild(loadText);this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,myloadmovie);this.loaderInfo.addEventListener(Event.COMPLETE,myover);function myloadmovie(event:ProgressEvent):void { var hl:Number=event.bytesLoaded/event.bytesTotal; var n:Number=Math.round(hl*100); loadText.text=n+"%";}function myover (event:Event):void { this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS,myloadmovie); nextFrame();}

下面是另一种自身loading的方法

view plaincopy to clipboardprint?

 

  1. stop();   
  2. import flash.display.LoaderInfo;   
  3. import flash.events.ProgressEvent;   
  4. import flash.text.TextField;   
  5. var loadText:TextField=new TextField();   
  6. loadText.x=220;   
  7. loadText.y=200;   
  8. addChild(loadText);   
  9. myload.addEventListener(Event.ENTER_FRAME,onEnterFramee);   
  10. function onEnterFramee (event:Event) {   
  11.      if (framesLoaded==totalFrames) {   
  12.          trace(1);   
  13.          myload.removeEventListener(Event.ENTER_FRAME,onEnterFramee);   
  14.          nextFrame();   
  15.      }   
  16.      else {   
  17.          var percent:Number=root.loaderInfo.bytesLoaded/root.loaderInfo.bytesTotal;   
  18.          var m:Number=Math.round(percent*100);   
  19.          myload.gotoAndStop(m);   
  20.          loadText.text=m+"%";   
  21.      }   
  22. }         //myload为场景中预设的loading动画的MC名字 
分享到:
share

    图片原图

    loading

    loading