欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

flash开发之加载图片 博客分类: flex

程序员文章站 2024-03-22 12:55:46
...

flash的强项就是处理动画。处理动画之前得加载一些前提资源。


加载使用的是Loader这个类。

看一示例,加载一个图片。

flash的加载图片只能加载jpg,gif,png类型,其它类型不能加载。


[SWF(width = "530", height = "510")]
public class BitmapDemo extends Sprite
{
public function BitmapDemo()
{
loadeImage();
}


private function loadeImage():void
{
var loader:Loader = new Loader();
var request:URLRequest = new URLRequest("assets/image/adobe.png");
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);

}

protected function onComplete(event:Event):void
{
var loaderInfo:LoaderInfo = event.target as LoaderInfo;
var loader:Loader = loaderInfo.loader;
var bmp:Bitmap = Bitmap(loader.content);
this.addChild(bmp);

}
}
这个示例很是简单。

但有一些疑问。


loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
为什么不直接在loader对象上添加监听,而得在contentLoaderInfo上添加

 

 

据说这是为了在内容还没有被加载的时候就获得被加载对象的属性:已加载尺寸,总尺寸,标称的宽和高,路径等。

 

 

这样的时候
loader.loaderInfo.addEventListener(Event.COMPLETE, onCompletetHandler);
会出错
这样的话却是对的
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompletetHandler);

那contentLoaderInfo和loaderInfo啥关系呢?其实loader的contentLoaderInfo属性是LoaderInfo类的一个实例。而LoaderInfo类是共享与Loader和被加载对象之间共享信息的类。

不过在未加载完成的时候loader.loaderInfo为null
所以在未加载完成之前一定要用loader.contentLoaderInfo
建议加载完成时也用loader.contentLoaderInfo

 

通过contentLoaderInfo添加下载侦听存在一个问题:加载文件有个时间延迟,在延迟的这段时间内可能已经开始加载别的文件了。所以在侦听到Event.COMPLETE事件的时候,并不知道到底是那个文件完成加载了。这时就需要通过contentLoaderInfof反向得到loader:
private function movieLoaded(evt:Event):void { trace(evt.target.loader.name); }