2009-12-29 77 views
0

標題可能有點誤導。看看我的代碼,我會解釋一下圖形對象bitMapData類型與bitmapData類型相同嗎?

public static function loadTile(tileDir:String = "empty"):void 
     { 
      if(tileDir != "empty") 
      { 
       tPoint = new Point(0,0); 
       tRect = new Rectangle(0,0,30,30); 

       //load in tile sheet image 
       loader = new Loader(); 
       loader.contentLoaderInfo.addEventListener(Event.INIT,tilesLoadInit); 
       loader.load(new URLRequest(tileDir)); 
      } 
     } 

     private static function tilesLoadInit (e:Event):void { 
      tileImage = Bitmap(loader.content).bitmapData; 
      tileReady.dispatchEvent(new Event("TileReady")); 
     } 
var tImage:BitmapData = new BitmapData(30,30); 
tileNum = tileNumber; 
tPoint.x = 0; 
tPoint.y = 0; 

tRect.x = 0; 
tRect.y = 0; 

tImage.copyPixels(tileImage,tRect,tPoint); 

this.graphics.beginBitmapFill(tImage); 
this.graphics.drawRect(0, 0,tWidth ,tHeight); 

我創建了一個名爲tImage的空bitMapData。然後我接收一個名爲tileImage的預定義變量,它也是一個bitMapData,它包含一張圖片的圖片。 tRect也是預定義的,它的寬度和高度都是30x30。我複製一張圖片,並將其放入tImage中。問題是,AS3引發錯誤,說tImage是一個不正確的類型

ArgumentError: Error #2015: Invalid BitmapData. 

但顯然它不是。我的問題是,是否有不同的圖形對象接受的bitMapData和bitMapData類型的數據類型?

我正在嘗試做拼貼與精靈。我希望我的拼貼是互動的,所以這就是爲什麼我使用sprite對象而不是使用常規bitMaps來表示我的拼貼。你可能想知道爲什麼我不使用graphics.beginBitmapFill(tImage);和graphics.drawRect(0,0,tWidth,tHeight);挑選我想要使用的瓷磚。理由是,因爲事實證明drawRect()第一個和第二個參數實際上改變了實際精靈坐落的位置。

因此,如果我設置精靈的x和y屬性爲x = 20,y = 20,那麼我設置我的drawRect(20,20)。它實際上爲我的精靈的x和y座標增加了一個額外的20個像素。我知道爲什麼,我只需要知道更好的方法。對不起,寫這麼多,謝謝你的時間!

回答

0

這並不是說類型錯了,而是說對象是無效的。如果類型錯誤,我希望你會得到一個TypeError。

您還沒有說明錯誤發生的位置,並假設問題出現在第8行的tImage中。這看起來更可能是第7行的tileImage(你沒有詳細說明)。

+0

我加在tileImage更多細節。就像我之前說過的,它是一個bitMapData,它起作用。如果我在beginBitmapFill方法而不是tImage中傳遞tileImage。它的工作原理,我收到沒有錯誤。但是如果我嘗試先裁剪圖像並將其傳入,那麼發生上述錯誤時就是如此。它們都是bitMapdatas類型,除非我決定先使用copyPixel方法裁剪圖像時,它不起作用。 – numerical25 2009-12-30 02:10:50

+0

對不起,如果我不能詳細。但簡而言之,任何從copypixel方法獲取內容的bitMapData在beginBitmapFill方法中都不起作用。它仍然是一個bitMapData類型,但它不工作。我只是好奇爲什麼 – numerical25 2009-12-30 02:21:53

0

這可能是因爲Flash對BitmapData對象大小的內置限制。如果總像素數大於16,777,215,則會拋出錯誤#2015。

您可以在文檔中閱讀:BitmapData,在「查看示例」右上方。

這裏的,如果你想給它一個鏡頭是用來工作的一招:BitmapData workaround