Flash AS3全新的加载(Loading)机制 contentLoaderInfo(转载)

做一个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了。

“Flash AS3全新的加载(Loading)机制 contentLoaderInfo(转载)”的3个回复

发表评论