我知道您使用graphics.clear
清除了所有图形,但清除了舞台上的图形,我想清除特定像素中的图形或xy值之间我该怎么做?AS3:如何清除特定像素/区域中的图形
4
A
回答
7
有没有办法做到这一点与图形。我只是尝试,绘制透明的形状不会造成漏洞,唉。
你应该有你的图形转换成位图实例和工作与像素:
package
{
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
public class Holey extends Sprite
{
public function Holey()
{
super();
// Lets create some example graphics.
graphics.beginFill(0x990000);
graphics.drawCircle(200, 200, 100);
graphics.endFill();
// Convert into raster and make 1 pixel transparent.
var aBit:Bitmap = rasterize(this);
aBit.bitmapData.setPixel32(50, 50, 0x00000000);
graphics.clear();
addChild(aBit);
}
private function rasterize(source:DisplayObject):Bitmap
{
// Obtain bounds of the graphics.
var aBounds:Rectangle = source.getBounds(source);
// Create raster of appropriate size.
var aRaster:BitmapData = new BitmapData(aBounds.width, aBounds.height, true, 0x00000000);
// Make an offset to capture all the graphics.
var aMatrix:Matrix = new Matrix;
aMatrix.translate(-aBounds.left, -aBounds.top);
aRaster.draw(source, aMatrix);
return new Bitmap(aRaster);
}
}
}
5
做到这将是with a mask
的方式。使用alpha蒙版(蒙版和maskee使用cacheAsBitmap=true
),您可以在蒙版上绘制透明像素以擦除零件。其基本做法是:
将要在一个共同的容器(掩码来实现你所有的图形,如果你的意思是为一切被削减,那么他们已经在一个共同的容器:
stage
或root
时间轴。)绘制一个位图数据对象,该对象在要擦除的区域中有一个透明的“孔”。例如:
// fill the stage with a solid rectangle var maskBitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xff000000); // erase part of it by drawing transparent pixels maskBitmapData.fillRect(new Rectangle(20, 20, 200, 100), 0); // create the mask object var maskBitmap:Bitmap = new Bitmap(maskBitmapData); maskBitmap.cacheAsBitmap = true; // this makes the mask an alpha mask addChild(maskBitmap);
将容器的
.mask
property。例如,为了掩盖整个主时间轴:root.cacheAsBitmap = true; // this makes the mask an alpha mask root.mask = maskBitmap;
3
开放堆栈溢出来回答一些问题,认为明年每小时约孔的放置在奶酪... :)
你可以还设置blendMode孔对象的属性为BlendMode.ERASE与cacheAsBitmap
的组合。这与面具类似,除非你实际上是画整体而不是外面的区域。 下面是一个例子:
//make cheese
var cheese:Sprite = new Sprite();
cheese.cacheAsBitmap = true;
stage.addChild(cheese);
cheese.x = cheese.y = 10;
//define holes
var holes:Shape = new Shape();
holes.blendMode = BlendMode.ERASE;
cheese.addChild(holes);
//draw cheese
var g = cheese.graphics;
g.beginFill(0xFFCC00);
g.drawRect(0,0,200,150);
//**Attack chees with mices.
g = holes.graphics;
for (var i:int = 0; i < 10; i++){
g.beginFill(0xFF00FF);
var hx = Math.random()*(cheese.width-7)+7;
var hy = Math.random()*(cheese.height-7)+7;
var s = Math.random()*15;
g.drawCircle(hx, hy, s);
g.endFill();
}
结果会是这样的事情:
编辑:
原来你并不需要,如果你使用cacheAsBitmap
设置父对象的混合模式为LAYER
(doc说它应该被自动设置...) 所以你可以使用cheese.blendMode = BlendMode.LAYER;
而不是cheese.cacheAsBitmap = true;
。如果我没有记错,面具也不需要cahceAsBitmap
,即使是NORMAL
混合模式。
相关问题
- 1. rgl清除绘图的特定区域
- 2. 如何清除画布元素中的多边形区域?
- 3. 以特殊位图的形式清除画布区域
- 4. 如何清除HTML5画布中的特定区域?
- 5. 如何在matplotlib图形中的特定区域绘制矩形
- 6. 如何从Android中的特定区域的位图中移除图形
- 7. 如何清除图像上的图形
- 8. 如何分析MATLAB中图像区域的形态特征?
- 9. 如何从阵列中删除元素的特定区域
- 10. nginx:limit_req_zone区域如何清除?
- 11. 限制图像特定区域的像素着色器
- 12. 从图像中选择特定区域
- 13. 如何清除WebGL中的矩形区域?
- 14. 如何清除OpenGL纹理中的区域(即:圆形)?
- 15. 读取tif图像的特定区域
- 16. 平滑图像的特定区域
- 17. 放大图像的特定区域
- 18. 如何使用Tess4j识别图像中的特定区域java
- 19. Android:如何将文本写入图像中的特定区域
- 20. 获取图像特定区域的所有多边形坐标?
- 21. 复制图像中的像素区域
- 22. jquery图像定义区域多边形
- 23. 从图像中提取一个矩形像素区域
- 24. 如何在UWP中将特定区域视为图像?
- 25. AS3:定义命中区域
- 26. 识别图像中的矩形区域
- 27. 如何检查像素是否落在特定区域内?
- 28. 如何在特定区域找到非零像素Mat
- 29. 如何选择八度图像的100x100像素的内心正方形区域?
- 30. 如何在图像的特定区域应用阈值?
图形只是数字(矢量/形状点)。您只能清除位图中的像素。使用图形(矢量)的容器(sprite/MC)上的'draw'来获得位图快照,然后你可以简单地使用'setPixel'来设置一个“清除”彩色像素。 –