Я пытаюсь написать класс, который его конструктор принимает в качестве аргумента String (который является изображением в моем каталоге, например: jpg), и загрузить соответствующее изображение через объект загрузчика в памяти. Я также предоставляю функцию getBitmapFromLoader (), чтобы получить растровое изображение загрузчика и использовать его из другого класса.
public class LoadImage extends Loader
{
private var bitmap:Bitmap;
private var ldr:Loader;
public function LoadImage(nameURL:String):void
{
trace("LoadImage constructor");
ldr = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorEventHandler);
var request:URLRequest = new URLRequest(nameURL);
ldr.load(request);
}
/* methods */
public function getBitmapFromLoader():Bitmap
{
return bitmap;
}
public function toSprite():Sprite
{
trace("toSprite method");
var sprite:Sprite = new Sprite();
sprite.addChild(bitmap);
return sprite;
}
public function toMovieClip():MovieClip
{
trace("toMovieClip method");
var mvc:MovieClip = new MovieClip();
mvc.addChild(bitmap);
return mvc;
}
private function completeHandler(event:Event):void
{
trace("completeHandler " + event.currentTarget);
bitmap = new Bitmap();
bitmap = Bitmap(event.currentTarget.content);
}
private function ioErrorEventHandler(event:IOErrorEvent):void
{
trace("ioErrorEventHandler " + event.currentTarget);
trace("error on loading image: " + event.currentTarget.url);
bitmap = null;
}
}
}
но это не работает.
Вот что выводит вспышка:
Main constructor
LoadImage constructor
toSprite method
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChild()
at loader::LoadImage/toSprite()
at Main()
completeHandler [object LoaderInfo]
Вот как я использую его из основного класса:
package
{
import loader.*;</p>
<pre><code>import flash.display.MovieClip;
import flash.display.Sprite;
public class Main extends MovieClip
{
/* properties */
/* constructor */
public function Main():void
{
trace("Main constructor");
var imgLdr:LoadImage = new LoadImage("smile_bg.jpg");
var spr1:Sprite = imgLdr.toSprite();
//this.width = spr1.width;
//this.height = spr1.height;
this.addChild(spr1);
}
/* methods */
}
}