在学习AS2的时候,做LOADING有很多种方法,做起来也得心应手。但是到as3的时候做LOADING的时候却无从下手,抓瞎了几天。因为在as3中引入了一个全新的类LoaderInfo,这个类可作用于任何的可显示对象(display object),这个对象里包含了加载过程检测、加载地址、加载对象的内容、加载对象总字节数(和加载过程中的字节数)、加载对象的宽度高度等等非常多的内容。
有2种方式可以访问LoaderInfo对象:
- 访问flash.display.Loader对象的contentLoaderInfo属性;
- 任何一个可显示对象(display object)都有loaderInfo属性;
注意:每个SWF文档的主类的实例有loaderInfo属性,每个Loader有loaderInfo属性,同时它有一个contentLoaderInfo属性,通过这个属性你可以访问到Loaded对象的loaderInfo。
下面还来例子示范。
首先来一个loading外部文件的例子:
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
- 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的方法
- stop();
- import flash.display.LoaderInfo;
- import flash.events.ProgressEvent;
- import flash.text.TextField;
- var loadText:TextField=new TextField();
- loadText.x=220;
- loadText.y=200;
- addChild(loadText);
- myload.addEventListener(Event.ENTER_FRAME,onEnterFramee);
- function onEnterFramee (event:Event) {
- if (framesLoaded==totalFrames) {
- trace(1);
- myload.removeEventListener(Event.ENTER_FRAME,onEnterFramee);
- nextFrame();
- }
- else {
- var percent:Number=root.loaderInfo.bytesLoaded/root.loaderInfo.bytesTotal;
- var m:Number=Math.round(percent*100);
- myload.gotoAndStop(m);
- loadText.text=m+"%";
- }
- }