Actionscript 3:如何清除Graphics对象的一部分

时间:2011-05-10 19:34:20

标签: actionscript graphics

我正在制作一个Flash CS5应用程序,其中用户在放置在图像顶部的Sprite上绘制透明叠加层。用户需要能够像MS Paint,Adobe Photoshop或GIMP一样擦除他的输入。因为Sprite位于图像的顶部,所以没有安全的清晰颜色,我可以想到在用户刚擦过橡皮擦的部分上绘制。

如何执行或模拟部分清除Graphics对象?

1 个答案:

答案 0 :(得分:1)

它实际上是否需要是一个Sprite,就像在矢量图形中一样? 叠加层可以是Bitmap对象吗?您是否想要进行像素级颜色更改,例如MS Paint中的画笔或橡皮擦?

如果你真的不需要矢量图形,我建议你改用Bitmap对象。请按照以下步骤操作:

Sprite叠加层实际上是一个Bitmap叠加层,一定要让它透明

var bmp : Bitmap = new Bitmap( new BitmapData(imgWidth, imgHeight, true, 0));

你可以在一个临时精灵或事件中创建矢量图形,因为你不需要收容。

var tmpVectorGraphics : Shape = new Shape();
// draw whatever you want using the graphics library functions
drawStuffInShape(tmpVectorGraphics); 

现在在Bitmap对象的bitmapdata上绘制矢量图形内容 - 转换位图图形中的矢量图形

bmp.bitmapData.draw(tmpVectorGraphics);
// if what you've drawn in the shape containing the vector graphics is overlayed
// the same way as the bmp object, you don't need to specify a matrix object

之后你可以清除tmpVectorGraphics

tmpVectorGraphics.graphics.clear();

要清除像Paint中的橡皮擦那样的像素,你可以创建一个透明的形状并将其复制到位图中的特定位置。

// create the eraser bitmap data
var eraser : BitmapData = new BitmapData(5, 5, true, 0);
// this is the location of where you want the eraser to be applied
var pos : Point = new Point (locationX, locationY); 
// apply the eraser to the main bmp overlay to a specific location
bmp.bitmapData.copyPixels(eraseer, eraser.rect, pos);

因此,只要您想添加一些图形,就可以在tmpVectorGraphics Shape中生成它们,然后在Bitmap对象上绘制它们。 这在性能方面也更快,因为创建Shape的图形命令越多,每帧渲染的命令越多。位图缓存在内存中,图形的复杂程度并不重要。

你可以在动作脚本中使用BitmapData做很多事情,并且在处理速度方面非常便宜所以我建议你搜索一些BitmapData教程,因为如果你知道如何掌握这个类,你可以创建一个惊人的绘画应用程序:)

干杯, 米赫内亚