2010-02-24 59 views
0

我有一个类(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); 
    }  
} 

}

回答

1

可以使用ImageLoader的对象的公共职能getWidthgetHeight获得图像的宽度和高度,但你需要知道的负荷完成时,所以你可以派遣一个事件从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和0。我更新了我的第一篇文章中的代码,以确保我正确嵌入了您的代码。 – Ponty 2010-02-24 11:00:11

+0

是的,我发现我的错误!在计算宽度和高度后,我必须将调度语句。谢谢圆顶! – Ponty 2010-02-24 11:06:04

+0

实际上,我无法在主要工作上取得任何进展,因为我无法在我的Main构造函数体中使用这些值(宽度,高度)。当我尝试将onImageLoadComplete中的值保存到变量中,并在构造函数中使用它们时,我仍然得到0作为结果:( – Ponty 2010-02-24 11:17:41

相关问题