1、Loader
Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。 使用 load() 方法来启动加载。 被加载的显示对象将作为 Loader 对象的子级添加。
在使用Loader加载数据,添加侦听事件时,一定要给Loader的contentLoaderInfo属性增加事件,而不是给Loader对象增加事件。
Loader侦听事件时,用contentLoaderInfo来侦听:
1 public function LoderDemo() 2 { 3 stage.align = StageAlign.TOP_LEFT; 4 stage.scaleMode = StageScaleMode.NO_SCALE; 5 6 var loader:Loader = new Loader(); 7 loader.load( new URLRequest( "test.png" ) ); 8 loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError); 9 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 10 }
在加载内容时必须侦听它的IOErrorEvent事件,以防出现加载错误
必须把加载错误的情况考虑进去,常见的还有Http的请求错误
1 urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
1 protected function onError(event:IOErrorEvent):void 2 { 3 trace(" url not found....") 4 }
用copyPixels方法来复制图片
protected function onComplete(event:Event):void { var loaderInfo:LoaderInfo = event.target as LoaderInfo; trace( loaderInfo.content ); trace( loaderInfo.content is Bitmap ); var bmp:Bitmap = loaderInfo.content as Bitmap; //addChild( bmp ); var bd:BitmapData = bmp.bitmapData; var newBD:BitmapData = new BitmapData( bd.width/2, bd.height/2 ); newBD.copyPixels( bd, new Rectangle( 0, 0, bd.width/2, bd.height/2 ), new Point() ); var newBmp:Bitmap = new Bitmap( newBD ); addChild( newBmp ); }
2、 URLLoader
URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。 在下载文本文件、XML 或其它用于动态数据驱动应用程序的信息时,它很有用。 URLLoader 对象会先从 URL 中下载所有数据,然后才将数据用于 ActionScript。 它会发出有关下载进度的通知,通过 bytesLoaded 和 bytesTotal 属性以及已调度的事件,可以监视下载进度。
使用dataFormat属性来定义加载的类型
public function URLLoderDemo() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var urlLoader:URLLoader = new URLLoader(); //指定以原始二进制数据形式接收下载的数据。 urlLoader.dataFormat = URLLoaderDataFormat.BINARY; urlLoader.load( new URLRequest( "test.png" ) ); urlLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
urlLoader.addEventListener(Event.COMPLETE, onLoader); }
如果使用URLLoader来加载图片,那么必须使用Loader来作为中转才可以显示加载的内容,这大概就是为什么有了URLLoader后,Loader类存在的理由。
通过Loader的loadBytes属性来加载二进制的内容
protected function onLoader(event:Event):void { var urlLoader:URLLoader = event.target as URLLoader; trace( urlLoader.data ); //二进制数据 var loader:Loader = new Loader(); loader.loadBytes( urlLoader.data ); addChild( loader ); }
使用加载上来的图片内容需要通过loaderContentInfo来实现
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
又重新做会Loader所做的工作
protected function onComplete(event:Event):void { var loaderInfo:LoaderInfo = event.target as LoaderInfo; trace( loaderInfo.content ); trace( loaderInfo.content is Bitmap ); var bmp:Bitmap = loaderInfo.content as Bitmap; //addChild( bmp ); var bd:BitmapData = bmp.bitmapData; var newBD:BitmapData = new BitmapData( bd.width/2, bd.height/2 ); newBD.copyPixels( bd, new Rectangle( 0, 0, bd.width/2, bd.height/2 ), new Point() ); var newBmp:Bitmap = new Bitmap( newBD ); addChild( newBmp ); }
3、 URLStream
URLStream 类提供对下载 URL 的低级访问。 数据一下载,便可随即为应用程序使用,这和使用 URLLoader 时需要等到整个文件下载完不同。并且 URLStream 类还允许在完成下载前关闭流。 已下载文件的内容将作为原始二进制数据提供。 在 URLStream 中的读取操作是非阻塞模式的。 这意味着您在读取数据之前必须使用 bytesAvailable 属性来确定是否能够获得足够的数据 。 如果不能获得足够的数据,将引发 EOFError 异常。