6.6.动态载入外部图片

问题
我要在Flash运行时动态载入图片
解决办法
使用新的Loader类载入图片(jpg,png,gif)
讨论
9.17节将展示如何在编译期通过[Embed] 元数据标签绑定外部文件到Flash。在运行期间载入外部图片或flash需要用到Loader 类。

flash.display.Loader 类非常类似于flash.net.URLLoader 类(19.3节讨论)。不同的是Loader 实例能载入外部图片和flash,在传输数据方面URLLoader更有用些。

载入外部内容需要三个步骤:
创建Loader 类实例
把Loader 实例加到显示列表里
调用load( )方法载入外部内容

load( ) 方法下载图片或.swf文件,它需要一个URLRequest 对象作为参数,该对象指定一个需要下载资源的URL。

下面的例子通过Loader 实例下载一张图片image.jpg :
+展开
-ActionScript
package {
import flash.display.*;
import flash.net.URLRequest;
public class LoaderExample extends Sprite {
public function LoaderExample( ) {
// 1. 创建Loader 类实例
var loader:Loader = new Loader( );
// 2. 添加到可视化对象列表
addChild( loader );
// 3. 调用load( )方法
loader.load( new URLRequest( "image.jpg" ) );
}
}
}

当运行代码时,播放器寻找.swf 文件所在目录下的图片文件,URLRequest 对象使用相对URL,也可以是绝对URL。如果下载成功会自动当作Loader 实例的子对象。

在载入外部资源的过程中可能会出现错误,比如,可能是URL地址不正确,或者是Flash播放器安全沙漏不允许,或者资源太大需要很长的时间下载,需要一个进度条告诉用户下载进度。

面对这些可能的情况,我们需要添加一个事件去检测它,Loader实例的contentLoaderInfo 属性会对不同的情况作出不同的反应事件。contentLoaderInfo 属性是flash.display.LoaderInfo 类实例,用来提供目标被载入时的信息,下面是LoaderInfo 类的一些有用的事件:
open
当资源开始下载时触发
progress
资源在下载中时触发
complete
当资源下载完成时触发
init
当载入外部的.swf初始化时触发
httpStatus
当载入外部资源的HTTP请求产生状态代码错误时触发
ioError
当一个错误导致下载被终止时触发,比如找不到相应资源
securityError
当试图读取安全沙漏以外的数据时触发
unload
当unload( ) 方法被调用或移除载入的内容时或再次调用load( ) 方法时都会触发该事件

下面的例子演示了contentLoaderInfo.的事件:
+展开
-ActionScript
package {
import flash.display.*;
import flash.text.*;
import flash.net.URLRequest;
import flash.events.*;
public class LoaderExample extends Sprite {
public function LoaderExample( ) {
// Create the loader and add it to the display list
var loader:Loader = new Loader( );
addChild( loader );
loader.contentLoaderInfo.addEventListener( Event.OPEN, handleOpen );
loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, handleProgress );
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleComplete );
loader.load( new URLRequest( "image.jpg" ) );
}
private function handleOpen( event:Event ):void {
trace( "open" );
}
private function handleProgress( event:ProgressEvent ):void {
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
trace( "progress, percent = " + percent );
}
private function handleComplete( event:Event ):void {
trace( "complete" );
}
}
}

运行上面的代码,在控制台上会显示下载百分比等信息。

下面我们修改下代码,在下载的过程中显示百分比。比如handleOpen( ) 方法创建一个显示百分比的文本框,handleProgress( ) 更新文本框的百分比,最后handleComplete( ) 方法进行清除,因为资源已全部下载:
+展开
-ActionScript
private function handleOpen( event:Event ):void {
_loaderStatus = new TextField( );
addChild( loaderStatus );
_loaderStatus.text = "Loading: 0%";
}
private function handleProgress( event:ProgressEvent ):void {
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
_loaderStatus.text = "Loading: " + percent + "%";
}
private function handleComplete( event:Event ):void {
removeChild( loaderStatus );
_loaderStatus = null;
}

在类中添加_loaderStatus 变量,类型为TextField。
private var _loaderStatus:TextField;

加支付宝好友偷能量挖...


评论(0)网络
阅读(100)喜欢(0)flash/flex/fcs/AIR