Flash 是否可以将装入器对象的维度传递给另一个类?
我有一个类(ImageLoader),它扩展了Sprite容器并将外部图像加载到其实例中。当我从另一个(主)类实例化这个类的对象时,我想让这个(主)类知道加载图像的尺寸(宽度、高度)。这似乎对我来说很难,因为在图像加载后,尺寸是已知的。但我不知道如何将此信息从completeHandler事件处理程序传递到主类。有什么想法吗Flash 是否可以将装入器对象的维度传递给另一个类?,flash,actionscript-3,Flash,Actionscript 3,我有一个类(ImageLoader),它扩展了Sprite容器并将外部图像加载到其实例中。当我从另一个(主)类实例化这个类的对象时,我想让这个(主)类知道加载图像的尺寸(宽度、高度)。这似乎对我来说很难,因为在图像加载后,尺寸是已知的。但我不知道如何将此信息从completeHandler事件处理程序传递到主类。有什么想法吗 包裹 { 导入flash.display.Sprite; 导入flash.events.Event public class Main extends Sprite {
包裹
{
导入flash.display.Sprite;
导入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());
}
}
}
包裹
{
导入flash.display.Sprite;
导入flash.display.Loader;
导入flash.events.Event;
导入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 );
}
}
}
您可以使用ImageLoader对象公共函数getWidth
和getHeight
获取图像的宽度和高度,但您需要知道加载何时完成,以便可以从ImageLoader completeHandler发送事件,如:
// declare public static constant
public static const COMPLETE : String = "complete";
// inside complete handler
dispatchEvent(new Event(ImageLoader.COMPLETE));
完成此操作后,您现在可以从主类中收听此事件,如下所示:
myImg2 = new ImageLoader( img2 );
myImg2.addEventListener(ImageLoader.COMPLETE, onImageLoadComplete);
// inside onImageLoadComplete handler you can read the width and height:
private function loadComplete(evt : Event) : void
{
trace (ImageLoader(evt.currentTarget).getWidth());
trace (ImageLoader(evt.currentTarget).getHeight());
}
我完全按照你的建议做了,但结果得到了0和0。我在第一篇文章中更新了代码,以确保正确嵌入了您的代码。是的,我发现了错误!!我必须在计算完宽度和高度后再写一份派遣声明。谢谢你!实际上,我还不能在我的主要工作上取得任何进展,因为我不能在我的主构造函数主体中使用这些值(宽度、高度)。当我尝试将onImageLoadComplete中的值保存到变量并在构造函数中使用它们时,结果仍然是0:(主类的构造函数是第一个要执行的代码,因此我认为这些值尚未更新。就我所知,在代码中执行的顺序是:| 1->Main(构造函数)| 2->ImageLoad(在主构造函数内创建)| 3->load image | 4->ImageLoad.completeHandler(这里有dispatchEvent(新事件(ImageLoader.COMPLETE)))| 5->Main.loadComplete。因此,您期望的值仅在loadComplete函数启动时可用,在主类的构造函数执行很长时间后才可用。