標題可能有點誤導。看看我的代碼,我會解釋一下圖形對象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個像素。我知道爲什麼,我只需要知道更好的方法。對不起,寫這麼多,謝謝你的時間!
我加在tileImage更多細節。就像我之前說過的,它是一個bitMapData,它起作用。如果我在beginBitmapFill方法而不是tImage中傳遞tileImage。它的工作原理,我收到沒有錯誤。但是如果我嘗試先裁剪圖像並將其傳入,那麼發生上述錯誤時就是如此。它們都是bitMapdatas類型,除非我決定先使用copyPixel方法裁剪圖像時,它不起作用。 – numerical25 2009-12-30 02:10:50
對不起,如果我不能詳細。但簡而言之,任何從copypixel方法獲取內容的bitMapData在beginBitmapFill方法中都不起作用。它仍然是一個bitMapData類型,但它不工作。我只是好奇爲什麼 – numerical25 2009-12-30 02:21:53