在侦听结构的基础上来看加载,代码还是比较容易接受的。
载入外部内容需要三个步骤:
创建 Loader 类实例
把 Loader 实例加到显示列表里
调用 load() 方法载入外部内容
需要了解的事件有:
open 当资源开始下载时触发
progress 资源在下载中时触发
complete 当资源下载完成时触发
init 当载入外部的 初始化时触发
下面的代码演示了一个文本框进度条的使用和加载。
package {
import flash.display.*;
import flash.text.*;
import flash.net.URLRequest;
import flash.events.*;
public class LoaderExample extends MovieClip {
var _loaderStatus:TextField;
public function LoaderExample(s:String = "d2.jpg") {
// 1. Create an instance of the Loader class
var loader:Loader=new Loader;
// 2. Add the Loader instance to the display list
addChild(loader);
// Add the event handlers to check for progress
loader.contentLoaderInfo.addEventListener( Event.OPEN, handleOpen );
loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, handleProgress );
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleComplete );
// 3. Call the load( ) method to pull in an external asset
loader.load(new URLRequest(s));
}
private function handleOpen( event:Event ):void {
//trace( "open" );
_loaderStatus = new TextField( );
addChild( _loaderStatus );
_loaderStatus.text = "Loading: 0%";
}
private function handleProgress( evt:ProgressEvent ):void {
var percent:Number = evt.bytesLoaded / evt.bytesTotal * 100;
percent = Math.round ( percent * 100 )/100; //保留两位小数位
_loaderStatus.text = "Loading: " + percent + "%";
trace( "progress, percent = " + percent );
}
private function handleComplete( event:Event ):void {
trace( "complete" );
removeChild( _loaderStatus );
_loaderStatus = null
}
}
}
将上面的类文件做为文档类,与fla 文件绑定,可以看到执行效果。在测试加载时,在flash播放器中,从视图-》下载设置 中选择一个较低的网速,然后 点击 视图-》模拟下载,就可以看到文本框在不断的刷新,直到下载完成。
用遨游浏览器,打开硬盘文件时,会得到一个网络地址形式的文件地址,这个地址可以用来指定加载在不同目录中的内容。
例如: file:///D:/Book/一笔画/dyb096_b.jpg
加载 flash 并与之交互,分两步来完成,
第一步,设计被加载的 swf ,可以定义一个类,提供外部可访问的函数及属性,将这个类指定为文档类,并生成 swf 文件,
第二步,设计加载代码,在需要进行加载的影片中,利用 loader.content 来得到被加载的引用,指向被加载的文件,之后,就可以当做是本地对象一样来使用被加载的对象了。
cookbook 6.7 载入外部swf 文件并与之交互 里面就是这样的例子。
压缩包下载
由上面这个加载的交互的例子可以看到,为了更好到实现交互控制,被加载文件需要有以下的几个要求:
1、功能、结构要简单
2、提供外部访问的接口
3、以文档类的形式与类文件绑定