Можно ли передать размерность объекта Loader другому классу? - PullRequest
0 голосов
/ 24 февраля 2010

У меня есть класс (ImageLoader), который расширяет контейнер Sprite и загружает внешнее изображение в его экземпляр. Когда я создаю экземпляр объекта этого класса из другого (основного) класса, я хочу, чтобы размеры (ширина, высота) загруженного изображения были известны этому (основному) классу. Мне кажется, что это сложно, так как размеры известны после загрузки изображения. Но я не знаю, как передать эту информацию из обработчика события completeHandler в класс Main. Есть идеи?

package { import flash.display.Sprite; import flash.events.Event;</p> <pre><code>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;</p> <pre><code>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 Ответ

1 голос
/ 24 февраля 2010

Вы можете получить ширину и высоту изображения с помощью открытых функций объекта 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...