标题可能有点误导。看我的代码,我会解释
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 类型的数据类型有什么不同吗?
我正在尝试用精灵平铺。我希望我的图块是交互式的,所以这就是为什么我使用精灵对象而不是使用常规位图来表示我的图块。您可能想知道为什么我不只使用 graphics.beginBitmapFill(tImage); 和 graphics.drawRect(0, 0,tWidth ,tHeight ); 挑选出我想使用的瓷砖。原因是因为事实证明 drawRect() 第一个和第二个参数实际上改变了实际精灵所在的位置。
因此,如果我将精灵的 x 和 y 属性设置为 x = 20,并且 y = 20。然后我设置我的 drawRect(20,20)。它实际上为我的精灵的 x 和 y 坐标增加了 20 个像素。我知道原因,我只需要知道更好的方法。抱歉写了这么多,谢谢你的时间!