0

标题可能有点误导。看我的代码,我会解释

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 个像素。我知道原因,我只需要知道更好的方法。抱歉写了这么多,谢谢你的时间!

4

2 回答 2

0

这不是说类型错误,而是说对象无效。如果类型错误,我希望您会收到 TypeError。

您也没有说明错误的确切位置,并假设问题出在第 8 行的 tImage 上。看起来更有可能问题出在第 7 行的 tileImage (您没有提供任何详细信息)。

于 2009-12-30T00:12:12.453 回答
0

这可能是因为 Flash 对 BitmapData 对象大小的内置限制。如果总像素数大于 16,777,215,则会引发错误 #2015。

您可以在文档中阅读它:BitmapData,就在“查看示例”的正上方。

如果您想试一试,这里有一个曾经有效的技巧:BitmapData workaround

于 2011-03-06T21:55:40.233 回答