我正在尝试编写一个类,其构造函数将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.*;
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 */
}
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 */
}
答案 0 :(得分:1)
好吧,一个Loader本身就是一个DisplayObject - 所以你可以只使用addChild(event.currentTarget)它就会很好地显示出来。它像Sprite一样扩展DisplayObjectContainer。
如果您确实需要一个Bitmap,那么您可以执行以下操作:
var bmd:BitmapData = new BitmapData(event.currentTarget.width, event.currentTarget.height);
bmd.draw(event.currentTarget);
bitmap = new Bitmap(bmd);
这样做。你可能不得不调整一下我将从记忆中消失。
如果您遇到Display API问题,这是一个非常好的图表,可以概括各种显示对象子项的连接位置和方式:http://accad.osu.edu/~pgerstma/class/pca/resources/as3API/AS3API-flash.display.png