【问题标题】:Is graphic object bitMapData type the same as bitmapData type?图形对象 bitMapData 类型是否与 bitmapData 类型相同?
【发布时间】:2009-12-29 20:21:30
【问题描述】:

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

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

【问题讨论】:

    标签: actionscript-3 bitmap tiling


    【解决方案1】:

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

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

    【讨论】:

    • 我在 tileImage 上添加了更多细节。就像我之前说的,它是一个 bitMapData,它可以工作。如果我在 beginBitmapFill 方法中传递 tileImage 而不是 tImage。它有效,我没有收到任何错误。但是如果我尝试先裁剪图像然后将其传入,那就是发生上述错误的时候。它们都是 bitMapdatas 类型,除非我决定先使用 copyPixel 方法裁剪图像,否则它不起作用。
    • 对不起,如果我不能这么详细。但简而言之,任何从 copypixel 方法获取内容的 bitMapData 都不能在 beginBitmapFill 方法中工作。它仍然是 bitMapData 类型,但它不起作用。我只是好奇为什么
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 2021-03-06
      • 2021-04-15
      相关资源
      最近更新 更多