AS3的loading机制

做一个loading预加载的效果相信大家都已经非常熟悉了,不管是用onEnterFrame还是setInterval,还是更高级的 MovieClipLoader。可当开始用AS3的时候,便连一个最简单的loading都无从下手了。是不是AS3中的loader更加复杂,难以控制呢。其实不是的,在AS3中引入了一个全新的类LoaderInfo,这个类可作用于任何的可显示对象(display object),这个对象里包含了加载过程检测、加载地址、加载对象的内容、加载对象总字节数(和加载过程中的字节数)、加载对象的宽度高度等等非常多的内容(内容太多了,更多的大家可以去看帮助)。

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

1)访问flash.display.Loader对象的contentLoaderInfo属性;

2)任何一个可显示对象(display object)都有loaderInfo属性;

注意:每个SWF文档是通过loaderInfo属性访问此对象的;每个Loader对象是通过contentLoaderInfo属性访问此对象,而Loader的加载对象Loaded则是通过loaderInfo属性访问次对象的。(简单点说就是只有Loader对象才有 contentLoaderInfo属性),具体可以看下图:

[attachimg]36563[/attachimg]

下面还是老习惯,来例子示范。

先来一个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类,比较简单,看帮助就好了。

 

第二,简单的自身loading:程序代码

loaderInfo. addEventListener( ProgressEvent. PROGRESS, loadProgress) ;

 

loaderInfo. 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" ) ;

trace ( this . loaderInfo. content)

}

从此例中我们看到,我们是直接用swf文档的loaderInfo属性来达到loading效果的。大家要写成类或者扩展更多功能那就都非常简单了。

 

如果flash里包含的组件、自定义类的内容比较大,这时候做自身loading就要注意一些。

1)去掉库里所有元素的linkage里的export in first frame选项。

2)打开publish->setting->Actionscript setting项,在Export classes in frame输入2(你想输出类的帧)。

3)在你想输出类的帧(这里是2)新建一个MC。这个MC有2帧,第一帧AS:stop();第二帧把操作1)中的元素拖到舞台上。

4)loading结束跳转到主帧(这里可用第3帧)。

注:可以用Simulate download来模拟网络下载情况,同时打开Bandwidth Profiler可以看到每帧的数据量。如果第一帧的数据量为总数据量的1%左右,那么loading效果就算OK了。

 PreLoader示例下载


匿名2008-07-09 11:13:5458.62.102.*

快速查询