加载资源 — 图片
as3加载图片,swf等资源需要用到flash.display.Loader,其中涉及事件侦听,虽然简单,但如果写的不好,很容易出现错误,既不报错,也没有任何显示。
package { import flash.display.Bitmap; import flash.display.DisplayObject; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.system.LoaderContext; /** * ... * @author zhujl */ public class LoadBitmap extends Sprite { private var loader:Loader; public function LoadBitmap() { init(); } public function init():void { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadCompleted); loader.load(new URLRequest('1.jpg')); } public function onLoadCompleted(e: Event):void { var bitmap: Bitmap = e.target.content as Bitmap; addChild(bitmap); } } }
为什么侦听loader.contentLoaderInfo呢?文档是这么写的:
“与加载相关的事件由 Loader 对象的 contentLoaderInfo 属性引用的 LoaderInfo 对象调度。 contentLoaderInfo 属性设置为有效的 LoaderInfo 对象(即使在加载内容之前),这样您就可以在加载前将事件侦听器添加到该对象。”
“要确定 Loader 对象的状态,请监视与 Loader 对象的 contentLoaderInfo 属性相关联的 LoaderInfo 对象的以下事件:...”
而在事件处理函数中,e.target自然就是contentLoaderInfo属性,也就是LoaderInfo对象,它的content属性是个DisplayObject,表示与此 LoaderInfo 对象关联的已加载对象。所以如果加载的是图片,它就是Bitmap,但需要先转换类型。
如果加载的图片太大,而我们需要在一个固定大小的容器中进行显示整张图片怎么办呢?
var bitmap: Bitmap = e.target.content as Bitmap; bitmap.width = 200; bitmap.height = 200; bitmap.x = 100; bitmap.y = 100; addChild(bitmap);