标题可能有点误导。请看我的代码,我将解释
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()第一个和第二个参数实际上改变了实际sprite所在的位置。
因此,如果我将精灵的x和y属性设置为x= 20,y= 20,然后设置我的drawRect(20,20)。它实际上为我的精灵的x和y坐标增加了额外的20个像素。我知道原因,我只想知道一个更好的方法。很抱歉写了这么多文章,感谢您的时间!
发布于 2009-12-30 08:12:12
这并不是说类型错误,而是说对象是无效的。如果类型错误,我希望你会得到一个TypeError。
您也没有说明抛出错误的确切位置,而是假设问题出在第8行的tImage上。看起来问题更可能出在第7行的tileImage (您没有给出任何细节)上。
发布于 2011-03-07 05:55:40
这可能是因为Flash对BitmapData对象的大小有内在的限制。如果总像素数大于16,777,215,则抛出错误#2015。
你可以在文档中找到它:BitmapData,就在“查看示例”的上方。
如果你想尝试一下,这里有一个曾经有效的技巧:BitmapData workaround
https://stackoverflow.com/questions/1976739
复制相似问题