2010-01-09 7 views
0

J'essaie de copier les pixels d'une donnée bitmap. mais je continue à obtenir l'erreur suivanteLe paramètre sourceBitmapData doit être non nul.

Parameter sourceBitmapData must be non-null. 

il arrive dans la méthode drawImage. exact après ma trace qui dit "a obtenu des données de toile".

canvasData.copyPixels(image,tileRect,tilePoint); 

Ci-dessous est mon code

package com.objects { 

    import flash.display.Sprite; 
    import flash.display.BitmapData; 
    import flash.display.Bitmap; 
    import flash.geom.Point; 
    import flash.geom.Rectangle; 
    import flash.display.Loader; 
    import flash.net.URLRequest; 
    import flash.net.*; 
    import flash.events.*; 
    import flash.display.LoaderInfo; 

    public class gameObject extends Sprite { 

     protected var goWidth:Number; 
     protected var goHeight:Number; 
     protected var image:BitmapData; 
     protected var canvas:Bitmap; 

     public function gameObject():void 
     { 
      init(); 
     } 

     private function init():void 
     { 

     } 

     public function loadImage(imageDir:String):void 
     { 
      trace("loadimage"); 
      var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE,imageComplete); 
      loader.load(new URLRequest(imageDir)); 
     } 

     private function imageComplete(e:Event):void { 
      var loader:LoaderInfo = LoaderInfo(e.target); 
      image = Bitmap(loader.content).bitmapData; 
      trace("imagecomplete"); 
     } 

     public function drawImage(xPoint:Number = 0, yPoint:Number = 0, tWidth:Number = 0, tHeight:Number = 0):void 
     { 
      var tilePoint:Point = new Point(0,0); 
      var tileRect = new Rectangle(xPoint,yPoint,tWidth,tHeight); 

      var canvasData:BitmapData = new BitmapData(tWidth,tHeight); 
      trace("got canvas data"); 
      canvasData.copyPixels(image,tileRect,tilePoint); 
      trace("copied pixels"); 
      canvas = new Bitmap(canvasData); 
     } 
    } 
} 

et au-dessous est ce que j'utilise pour appeler la classe

balls = new Array(); 
      balls[0] = new gameObject(); 
      balls[0].loadImage("com/images/ball.gif"); 
      balls[0].drawImage(0,0,15,15); 

Quelqu'un a un indice ??

Répondre

2

Une erreur se produit car la variable image (le premier paramètre à copyPixels) est nulle.

La variable image de GameObject est remplie dans la méthode imageComplete qui est appelée uniquement lorsque le chargement est terminé. loader.load() est asynchrone et renvoie avant le chargement complet de l'image. Vous appelez drawImage() dès que loadImage retourne et donc image serait null en ce moment. Envoyer un événement complete à partir de la méthode imageComplete et l'attendre avant d'appeler le drawImage.

private function imageComplete(e:Event):void 
{ 
    var loader:LoaderInfo = LoaderInfo(e.target); 
    image = Bitmap(loader.content).bitmapData; 
    trace("imagecomplete"); 
    //dispatch a complete event. 
    dispatchEvent(e); 
} 

game = new GameObject(); 
//listen for the complete event 
game.addEventListener(Event.COMPLETE, handleComplete); 
game.loadImage("com/images/ball.gif"); 

private function handleComplete(e:Event):void 
{ 
    //load complete and image populated : draw the image. 
    var game:GameObject = GameObject(e.target); 
    game.drawImage(0,0,15,15); 
} 
Questions connexes