擦除精灵图形?

时间:2009-05-06 03:10:29

标签: flash actionscript-3 actionscript

如果我有一个精灵,我已经绘制了一些东西,我该如何删除我绘制的部分内容?我最好使用drawRect()一些“alpha = 0”的颜料。

但是,我不相信beginFill()方法可以让您设置RGBA颜色(就像bitmapData中一样)。在alpha = 0的图形方法中设置beginFill()并没有真正做任何事情 - 它只是什么都没有。

在我的特定用例中,掩码不是一种选择。

另外,调用clear()不是一个好的解决方案,因为它会清除所有内容。

3 个答案:

答案 0 :(得分:10)

如果您不需要与Sprite下面的任何元素进行交互,那么您可以很好地实现这一点。

要做到这一点

  1. 以您想要的形状创建一个Shape对象,并将其cacheAsBitmap属性设置为true
  2. 将您的精灵的cacheAsBitmap媒体资源设为true
  3. 将您的Shape的blendMode属性设置为BlendMode.ERASE
  4. 将Shape添加到Sprite的显示列表

答案 1 :(得分:5)

不幸的是,你不能完全按照你希望用Graphics类做的。虽然擦除可能意味着你绘制了已经用背景颜色绘制的东西,但我猜你希望“将透明度”绘制回到Graphics对象上。使用0的alpha绘制并不是“没有” - 你只是看不到你画的是什么,因为它是完全透明的。

这是使用向量而不是位图的方法。 “擦除”矢量的一部分意味着您正在创建一个全新的矢量,这将需要一些计算,而不是仅仅将某个像素设置为某个颜色值。图形不提供这样的高级功能,但您可以编写自己的功能来执行此操作。 :P

一种解决方法是使用位图代替:
http://www.actionscript.org/forums/showthread.php3?t=187857
http://www.actionscripts.org/forums/showthread.php3?t=149021

另一个是考虑你是否可以用不同的方式实现你想要做的事情;一个适合使用clear()的人。

答案 2 :(得分:0)

如果您希望在擦除其他部分时保留部分绘图,那么唯一可行的路线就是使用多个精灵绘制。 为绘图的每个部分创建一个精灵,然后你可以选择你想要删除的精灵,剩下的就是。

除了你剩下的就是使用bitmapdata来复制部分,然后在使用clear draw之后再次复制复制的部分。 (这在复杂的庄园中很难实现,只能复制一个复杂的弯曲区域!)