我知道您使用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'來設置一個「清除」彩色像素。 –