有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了。