ActionScript 3.0中引入了一个专门用来处理外部swf文件和图像文件加载任务的类:Loader类。这篇文章将会详细介绍AS3中如何使用Loader类来加载外部图片。
开始之前先做一些准备工作。新建一个空的flash文件,注意选择支持ActionScript 3.0的flash文件,保存该flash文件。再找一张图片并将其和新建的flash文件放在同一目录下(AS3能直接处理的位图格式包括JPG、GIF和PNG)。AS3载入外部图像的关键步骤:
1. 创建Loader对象并调用load()方法载入外部图片;
2. 添加侦听器,侦测载入是否完成;
3. 载入完成后将载入的图片添加到显示列表中;
1. 先来创建一个loader对象
如果把外部的图片当成是水,loader对象就是用来装水的杯子,因此在开始任务前必须先准备好用来装水的杯子。有了杯子还得告诉它应该去哪里取水,即图像文件的地址,地址信息是用URLRequest类来处理的。在已保存的flash文件中按F9输入以下代码:
var imgURL:URLRequest = new URLRequest();
imgURL.url="flower.jpg";
var imgLoader:Loader = new Loader();
imgLoader.load(imgURL);
2. 侦听加载是否完成
针对图片的处理要在其被完全载入后才能开始,因此要先确认图片已经功载入。在上述代码后面添加侦听器,侦听图片载入是否已完成:
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, finished);
function finished(evt:Event):void {
trace("successfully loaded the image!");
}
按Ctrl+Enter测试影片,发现输出面板上出现“successfully loaded the image!”,代表图片已成功载入。
说明:另外需要注意的是,此处的侦听不是直接安装在Loader对象上,因为我们要侦听的不是水杯,而是水。Loader对象有一个contentLoaderInfo的属性,该属性指向被加载对象并处理被加载对象的信息。所以这里的侦听必须安装在contentLoaderInfo之上。
3. 将图像显示在舞台上
通过第二步的测试,得知图片已经成功载入,但是并没有在舞台上显示出这个图片。这里我们将要使用Bitmap类来将其显示在舞台中。修改第二步中的侦听函数:
function finished(evt:Event):void {
var img:Bitmap = new Bitmap(evt.target.content.bitmapData);
stage.addChild(img);
img.x=100;
img.y=100;
}
按Ctrl+Enter测试影片,可以看到图片已经按设定的位置出现在了舞台上。
说明:当Loader类载入了一个外部图片后,图像的解码信息被作为BitmapData格式存储在内存上,
Loader.contentLoaderInfo.content.bitmapData指向该位图的内存地址。因此将该bitmapData数据赋给Bitmap对象就能创建一个新的Bitmap显示对象。正是通过这样的方法将外部图片显示在舞台上的。
上面的例子示范了载入一个外部图像的完整过程,且在最后通过Bitmap对象将其显示在舞台上,其实也可以直接将Loader添加到显示列表中来显示图片:addChild(Loader); 因为Loader本身也是一个显示对象,所以这样做其实是将Loader和其内载入的图片一起添加到了舞台中。但如果需要使用一个Loader对象来循环载入多个图片,这样的方法就会有问题,因为载入下一个图像的时候,已被载入的图片会被覆盖。就像一个装满水的杯子,再要装一杯果汁时,必须先倒掉已有的水。
所以规范的做法是用Bitmap负责图片的显示,而Loader只负责图片的载入。
===================================================================================
import flash.display.Bitmap;
import flash.display.BitmapData;
//import fl.display
//import flash.display;
//import flash.display.BitmapData;
//import flash.display.Bitmap;
var b1:BitmapData = new BitmapData(100,100,false,0x0000ff);
var b2:Bitmap = new Bitmap(b1);
addChild(b2);
var c1:sss= new sss()
//图片转换为类
var c2:Bitmap =new Bitmap()
c2.bitmapData=c1
c2.x=150
c2.y=150
c2.scaleX=0.1
c2.scaleY=0.1
addChild(c2)
var loader:Loader=new Loader();
LoadImage();
function LoadImage()
{
var url=new URLRequest("1.jpg");
//加载
loader.load(url);
//注册加载事件,在加载完调用
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onload);
}
function onload(evt:Event)
{
//创建空的位图对象image,接收载入的位图图像数据
var image:Bitmap=Bitmap(loader.content);
image.x=50;
image.y=50;
image.scaleX=0.1
image.scaleY=0.1
addChild(image);
}
var loader1:Loader = new Loader();
loader1.contentLoaderInfo.addEventListener(Event.INIT, onInit);
loader1.load(new URLRequest("1.jpg"))
function onInit(e:Event)
{
var bitmapqq:Bitmap = loader1.content as Bitmap;
bitmapqq.x=10
bitmapqq.y=100
bitmapqq.scaleX=0.2
bitmapqq.scaleY=0.2
addChild(bitmapqq)
}
联系客服