J'essaye d'écrire une classe que son constructeur prend comme argument un String (qui est une image dans mon répertoire ie: jpg) et charge l'image correspondante via un objet loader en mémoire. Je fournis aussi la fonction getBitmapFromLoader() pour obtenir le bitmap du chargeur afin de l'utiliser depuis une autre classe.Un gestionnaire d'événements peut-il renvoyer une valeur?
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;
}
}
}
mais cela ne fonctionne pas. Ce est ce que les sorties Flash: 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]
Voici comment je l'utilise d'une classe principale: 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 */
}
}
vous devez être un peu plus précis que "ne fonctionne pas", aussi, revenez en arrière et marquez les réponses à vos questions passées comme acceptées! – grapefrukt
+1 en marquant les réponses passées comme acceptées. Vous obtiendrez de bien meilleures réponses si vous utilisez le système comme prévu. –
comme une note de côté, il me semble que votre classe LoadImage n'a pas besoin d'étendre Loader ou au moins vous ne prenez pas les avantages de la classe parente dans votre code ... – goliatone