Skip to main content
Inspiring
December 12, 2011
Answered

How to return sprite object?

  • December 12, 2011
  • 1 reply
  • 932 views

I want to load two picture and add every picture to every sprite object,such as picture a to sprite1 and picture b to spriteb,I know I can load a pictue by following code:

loadImage('a');
loadImage('b');
private function loadImage(imagePath:String):void {
  var loader:Loader = new Loader();
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.load(new URLRequest(imagePath));
}
private function onImageLoaded(event:Event):Sprite{
var loaderInfo:LoaderInfo=event.target as LoaderInfo;
_loadedBitmap=loaderInfo.content as Bitmap;
return runPostImageLoad(_sprite);
}
private function runPostImageLoad(_sprite:Sprite):Sprite{
...//load picture
}

But I want to make my code like following code,because I want to use sprite1 and sprite2 to do other thing:
var sprite1:Sprite=loadImage('a');
var sprite2:Sprite=loadImage('b');

I don't know how to modify  loadImage function to return sprite object. Anyone could tell me how to do it?

Thanks

This topic has been closed for replies.
Correct answer kglad

use:

private var _sprite:Sprite;

.

.

private function loadImage(imagePath:String):Sprite{

  var loader:Loader = new Loader();

loader.name="loader";

  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);

loader.load(new URLRequest(imagePath));

_sprite=new Sprite();

_sprite.addChild("loader");

return _sprite

}

private function onImageLoaded(event:Event):void{

   var loaderInfo:LoaderInfo=event.target as LoaderInfo;

   _loadedBitmap=loaderInfo.content as Bitmap;

   runPostImageLoad();

}

private function runPostImageLoad():void{

    //only draw the irregular part shape

    if(_loadedBitmap....){

_sprite.removeChild(_sprite.getChildByName("loader"));

        _sprite.graphics.drawRect(...); 

    }

}

p.s.  please mark correct and helpful answers.

1 reply

kglad
Community Expert
Community Expert
December 12, 2011

you can use the following but your sprite won't have any width/height until loading is complete.  and you can access the loader via the sprite by applying the getChildByName("loader") method to your sprite:

private function loadImage(imagePath:String):Sprite{

  var loader:Loader = new Loader();

loader.name="loader";

  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);

loader.load(new URLRequest(imagePath));

var s:Sprite=new Sprite();

s.addChild(loader);

}

Inspiring
December 13, 2011

Mr.kglad

    Thanks for your answer.Now I find another question,I want to deal with a irregular image in onImageLoaded,such as only draw the irregular part and don't draw out side of the irregular shape,code like follows:

private function onImageLoaded(event:Event):void{

   var loaderInfo:LoaderInfo=event.target as LoaderInfo;

   _loadedBitmap=loaderInfo.content as Bitmap;

   runPostImageLoad();

}

private function runPostImageLoad():void{

    //only draw the irregular part shape

    if(_loadedBitmap....){

        _sprite.graphics.drawRect(...); 

    }

}

If I use following your suggest code,I find I can't get rid of the out side of the irregular

loader.load(new URLRequest(imagePath));

var s:Sprite=new Sprite();

s.addChild(loader);

How to do with above question? Thanks

kglad
Community Expert
kgladCommunity ExpertCorrect answer
Community Expert
December 13, 2011

use:

private var _sprite:Sprite;

.

.

private function loadImage(imagePath:String):Sprite{

  var loader:Loader = new Loader();

loader.name="loader";

  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);

loader.load(new URLRequest(imagePath));

_sprite=new Sprite();

_sprite.addChild("loader");

return _sprite

}

private function onImageLoaded(event:Event):void{

   var loaderInfo:LoaderInfo=event.target as LoaderInfo;

   _loadedBitmap=loaderInfo.content as Bitmap;

   runPostImageLoad();

}

private function runPostImageLoad():void{

    //only draw the irregular part shape

    if(_loadedBitmap....){

_sprite.removeChild(_sprite.getChildByName("loader"));

        _sprite.graphics.drawRect(...); 

    }

}

p.s.  please mark correct and helpful answers.