import flash.display.Sprite; import flash.display.BlendMode; import flash.display.BitmapData; import flash.display.Bitmap; import flash.events.MouseEvent; import flash.geom.Matrix; import flash.geom.ColorTransform; import flash.text.TextField; import flash.utils.ByteArray; import flash.geom.Rectangle; var mc:Sprite = new mc_link(); var btp:BitmapData = new BitmapData(w, h); btp.draw(mc); var bt:Bitmap = new Bitmap(btp); addChild(bt); var isDrawing:Boolean; //定义擦除画笔的宽度 var penW:int = 15; this.stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandle); this.stage.addEventListener(MouseEvent.MOUSE_UP, upHandle); this.stage.addEventListener(MouseEvent.MOUSE_MOVE, moveHandle); function downHandle(e:MouseEvent):void{ if(bt.hitTestPoint(this.mouseX, this.mouseY)){ isDrawing = true; } } function upHandle(e:MouseEvent):void{ isDrawing = false; } function moveHandle(e:MouseEvent):void{ if(!isDrawing)return; e.updateAfterEvent(); //擦除原理:使用空数据替换 var nullBtp:BitmapData = new BitmapData(penW, penW, true, 0x00000000); var byteArr:ByteArray = nullBtp.getPixels(nullBtp.rect); byteArr.position = 0; btp.setPixels(new Rectangle(bt.mouseX, bt.mouseY, penW, penW), byteArr);
//检测是否完全擦除:btp.getColorBoundsRect(0xFF000000,0x00000000,false);
}
另外一种方法是增加一个容器,在容器上面绘画,然后组合起来,结果可能擦除不干净,并且检测不到是否擦完:
btp.draw(drawMc, new Matrix(), new ColorTransform(), BlendMode.ERASE);