Flash 是否可以将装入器对象的维度传递给另一个类?

Flash 是否可以将装入器对象的维度传递给另一个类?,flash,actionscript-3,Flash,Actionscript 3,我有一个类(ImageLoader),它扩展了Sprite容器并将外部图像加载到其实例中。当我从另一个(主)类实例化这个类的对象时,我想让这个(主)类知道加载图像的尺寸(宽度、高度)。这似乎对我来说很难,因为在图像加载后,尺寸是已知的。但我不知道如何将此信息从completeHandler事件处理程序传递到主类。有什么想法吗 包裹 { 导入flash.display.Sprite; 导入flash.events.Event public class Main extends Sprite {

我有一个类(ImageLoader),它扩展了Sprite容器并将外部图像加载到其实例中。当我从另一个(主)类实例化这个类的对象时,我想让这个(主)类知道加载图像的尺寸(宽度、高度)。这似乎对我来说很难,因为在图像加载后,尺寸是已知的。但我不知道如何将此信息从completeHandler事件处理程序传递到主类。有什么想法吗


包裹
{
导入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函数启动时可用,在主类的构造函数执行很长时间后才可用。