AS3 loading

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外部文件的例子:

CODE:

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

code:

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的方法

CODE:

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+"%";
     }
}         //myload为场景中预设的loading动画的MC名字


//创建进度条; 
var stg = new Sprite(); 
stg.graphics.lineStyle(1,0x00FFFF,0.2); 
stg.graphics.beginGradientFill(GradientType.LINEAR,[0xFFFF00],[100,100],[0,255]); 
stg.graphics.drawRect(0,0,200,5); 
stg.graphics.endFill(); 
stg.x = (stage.stageWidth - stg.width)/2 
stg.y = (stage.stageHeight - stg.height)/2 
this.addChild(stg) 
//添加加载侦听 
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,loading); 
this.loaderInfo.addEventListener(Event.COMPLETE,loaded); 

function loading(eve):void 
{ 
var loadpre:int = eve.bytesLoaded/eve.bytesTotal*100 
stg.scaleX = loadpre/100 
var txt:TextField = new TextField(); 
txt.text = loadpre + "%" 
stg.x = (stage.stageWidth - stg.width)/2 
stg.y = (stage.stageHeight - stg.height)/2 
this.addChild(txt) 
} 

function loaded(e:Event):void 
{ 
play(); 
} 

 


这就是AS3的Loading代码,希望对楼主有帮助哦



//stg.x = (stage.stageWidth - stg.width)/2
//stg.y = (stage.stageHeight - stg.height)/2

把这两句后面的改成一个具体的数字就可以了
比如:
stg.x = 400
stg.y = 500
这样就固定了一端,只会一端延长了

你可能感兴趣的:(Flash)