我有一个类(ImageLoader),它扩展了Sprite容器并将一个外部图像加载到它的实例。当我从另一个(主)类实例化这个类的对象时,我想让已知的(主)类加载的图像的尺寸(宽度,高度)。看起来这对我来说很困难,因为在图像竞争加载后尺寸是已知的。但我不知道如何将这个信息从completeHandler事件处理程序传递给Main类。有任何想法吗?是否可以将Loader对象的维度传递给另一个类?
package { import flash.display.Sprite; import flash.events.Event;
public class Main extends Sprite
{
private const img1:String = "pic1.jpg";
private const img2:String = "pic2.jpg";
private var myImg1:ImageLoader;
private var myImg2:ImageLoader;
public function Main():void
{
myImg1 = new ImageLoader(img1);
myImg1.cacheAsBitmap = true;
myImg1.addEventListener(ImageLoader.COMPLETE, onImageLoadComplete);
addChild(myImg1);
}
private function onImageLoadComplete(evt : Event) : void
{
trace (ImageLoader(evt.currentTarget).getWidth());
trace (ImageLoader(evt.currentTarget).getHeight());
}
}
}
package { import flash.display.Sprite; import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest;
public class ImageLoader extends Sprite
{
private var loader:Loader;
private var iWidth:int;
private var iHeight:int;
public static const COMPLETE : String = "complete";
public function ImageLoader(name:String):void
{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
var request:URLRequest = new URLRequest(name);
loader.load(request);
}
public function getWidth():int
{
return iWidth;
}
public function getHeight():int
{
return iHeight;
}
private function completeHandler(event:Event):void
{
iWidth = event.target.content.width
iHeight = event.target.content.height;
/* dispatcher MUST be after dimension computations */
dispatchEvent(new Event(ImageLoader.COMPLETE));
this.addChild(loader.content);
}
}
}
我做了你的建议,但我得到0和0。我更新了我的第一篇文章中的代码,以确保我正确嵌入了您的代码。 – Ponty 2010-02-24 11:00:11
是的,我发现我的错误!在计算宽度和高度后,我必须将调度语句。谢谢圆顶! – Ponty 2010-02-24 11:06:04
实际上,我无法在主要工作上取得任何进展,因为我无法在我的Main构造函数体中使用这些值(宽度,高度)。当我尝试将onImageLoadComplete中的值保存到变量中,并在构造函数中使用它们时,我仍然得到0作为结果:( – Ponty 2010-02-24 11:17:41