将对象添加到bitMapData

时间:2009-12-28 19:55:26

标签: actionscript-3 bitmap tiles bitmapdata

截至目前。我有3个物体。一个BitMap充当我的画布。和2位mapDatas。一个是我的缓冲区,另一个是我的瓷砖。我正在为游戏创建平铺效果。我想把我的tile:BitMapData,并把它变成一个自定义对象。原因是我希望每个瓷砖都是互动的。所以我可以点击每一个。是否可以将表示tile的bitMapData转换为具有属性和方法的自定义对象。有点像电影剪辑。并将其绘制到我的缓冲区?我可以创建一个扩展bitMapData的新类吗?或者我是否必须摆脱缓冲区并将tile对象直接绘制到BitMap中?

换句话说,将Sprite或tile放入BitMapData对象甚至是Bitmap的最佳方法是什么。

2 个答案:

答案 0 :(得分:3)

首先,BitmapData和Bitmap不可互换。它们是两个非常不同的东西。 BitmapData类包含位图像素数据,并允许您操作该像素数据,例如绘制它,改变特定像素的颜色,等等。无法直接显示BitmapData,即将其添加到显示列表中。

另一方面,Bitmap类是一个DisplayObject,如MovieClips和Sprites,它们可以添加到显示列表中。它的唯一目的是在显示列表中呈现BitmapData。实际上,它甚至不是交互式的,因此您无法直接在Bitmap实例上检测点击次数,例如。

关于你的问题:如果你有一个包含tile精灵的位图数据,并且你想在另一个bitmapdata中绘制该tile,你可以使用BitmapData.draw()方法或BitmapData.copyPixels()方法。后者是你可以在任何BitmapData上使用的最快的方法之一,所以我强烈推荐它。

根据您的特定应用程序,根本不可能在位图中绘制所有内容。听起来好像你想要能够检测所有磁贴上的点击事件,这让我觉得你可能会因为它们是单独的DisplayObjects而受益,例如精灵。

如果需要,可以创建一个扩展Sprite的Tile类,并使用位图填充绘制一个BitmapData。这样,您可以拥有所需的任何属性,还可以检测切片实例上的鼠标事件。

package
{
  /* ... imports ... */

  public class Tile extends Sprite 
  {
    private var _solid : Boolean;

    public function Tile(bmp : BitmapData, solid : Boolean)
    {
      this.graphics.beginBitmapFill(bmp, null, false, true);
      this.graphics.drawRect(0, 0, bmp.width, bmp.height);

      _solid = solid;
    }

    /**
     * Sample custom property. Could be used to define whether a tile
     * is solid, e.g. the player cannot pass it.
    */
    public function get isSolid() : Boolean
    {
      return _solid;
    }
  }
}

可以简单地为游戏中的每个图块实例化此类,传递应在图块中绘制的位图数据。您还可以在此类磁贴实例上侦听事件。

var tile : Tile;

tile = new Tile(myBitmapData, false);
tile.x = 200;
tile.y = 200;
tile.addEventListener(MouseEvent.CLICK, handleTileClick);

addChild(tile);

这样,您根本不必使用Bitmap类来渲染切片。它们可以直接添加到显示列表中。

答案 1 :(得分:0)

我想要一个更好的解决方案,当你想要选择瓷砖的某些部分而不影响精灵本身的位置时

theMatrix.translate(30,0);
this.graphics.beginBitmapFill(tileImage,theMatrix);
//this.graphics.drawRect(0, 0,tWidth ,tHeight );
this.graphics.endFill();

你的权利,使用Matrix.Translate将drawRect保留为0,0。允许你移动所需图块的哪个部分的位置,而不影响精灵位置本身。