2010-01-09 4 views
0

비트 맵 데이터의 픽셀을 복사하려고합니다. 하지만 계속해서 다음 오류가 발생합니다.매개 변수 sourceBitmapData는 null이 아니어야합니다.

Parameter sourceBitmapData must be non-null. 

drawImage 메서드에서 발생합니다. "캔버스 데이터를 얻었습니다."라고 말하는 나의 추적 후에 정확히.

canvasData.copyPixels(image,tileRect,tilePoint); 

다음은 내 코드

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); 
     } 
    } 
} 

이며, 아래 I 클래스

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

누구나 실마리가 전화를 걸 때 사용 무엇입니까?

답변

2

변수 (copyPixels의 첫 번째 매개 변수)가 null 인 오류가 발생하여 오류가 발생합니다.

GameObject의 변수는로드가 완료 될 때만 호출되는 imageComplete 메서드에서 채워집니다. loader.load()은 비동기이며 이미지가 완전히로드되기 전에 반환됩니다. loadImage이 반환 되 자마자 drawImage()을 호출하고 있으므로 image이 현재 null이됩니다. complete 이벤트를 imageComplete 메서드에서 보내고 기다린 후 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); 
} 
관련 문제