с битмапом, канеш удобнее..
как вариант: рисовать в невидимом шейпе, который срисовывать в битмап с разным блендМод, в зависимости от режима рисования или стерки:
Код:
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.TextField;
public class DrawTest extends Sprite {
var colors:Array=[0,0xFF0000,0x00FF00,0x0000FF];
var sizes:Array=[8,12,16,20];
var drawColor:Number=0;
var drawSize:Number=12;
var drawMode:Boolean=true;
var modeSelector:TextField;
var drawSprite:Sprite;
var drawShape:Shape=new Shape();
var canvas:Bitmap;
var startPoint:Point;
public function DrawTest(){
modeSelector=new TextField();
modeSelector.selectable=false;
modeSelector.background=true;
modeSelector.backgroundColor=0xEEEEEE;
modeSelector.text="draw";
modeSelector.width=50;
modeSelector.height=20;
modeSelector.addEventListener(MouseEvent.CLICK,switchMode);
addChild(modeSelector);
var i:Number=0;
for(i=0;i<colors.length;i++){
var cs:ColorSelector=new ColorSelector(colors[i]);
cs.x=100+60*i;
cs.y=20;
addChild(cs);
cs.addEventListener(MouseEvent.CLICK,switchColor);
}
////////////////
for(i=0;i<sizes.length;i++){
var ss:SizeSelector=new SizeSelector(sizes[i]);
ss.x=100+60*i;
ss.y=60;
addChild(ss);
ss.addEventListener(MouseEvent.CLICK,switchSize);
}
//////////////
drawSprite=new Sprite();
drawSprite.y=80;
drawSprite.graphics.beginFill(0xF5F5F5);
drawSprite.graphics.drawRect(0,0,550,300);
//просто закрасил, можно картнку пложить или еще чего..
//drawSprite.addChild(new Bitmap(new Pic(0,0)));//Pic-картинка в библиотеке
addChild(drawSprite);
canvas=new Bitmap(new BitmapData(550,300,true,0));
drawSprite.addChild(canvas);
drawSprite.addEventListener(MouseEvent.MOUSE_DOWN,startDraw);
drawSprite.addEventListener(MouseEvent.MOUSE_UP,stopDraw);
}
private function switchMode(e:MouseEvent):void{
drawMode=!drawMode;
modeSelector.text=drawMode ? "draw" : "erase";
}
private function switchColor(e:MouseEvent):void{
var s=e.target as ColorSelector;
drawColor=s.color;
}
private function switchSize(e:MouseEvent):void{
var s=e.target as SizeSelector;
drawSize=s.size;
}
private function startDraw(e:MouseEvent):void{
drawSprite.addEventListener(Event.ENTER_FRAME,render);
startPoint=new Point(drawSprite.mouseX,drawSprite.mouseY);
}
private function stopDraw(e:MouseEvent):void{
drawSprite.removeEventListener(Event.ENTER_FRAME,render);
}
private function render(e:Event):void{
drawShape.graphics.lineStyle(drawSize,drawColor);
drawShape.graphics.moveTo(startPoint.x,startPoint.y);
startPoint=new Point(drawSprite.mouseX,drawSprite.mouseY);
drawShape.graphics.lineTo(startPoint.x,startPoint.y);
canvas.bitmapData.draw(drawShape,null, null,drawMode? null:BlendMode.ERASE);
drawShape.graphics.clear();
}
}
}
/////////////////////////////////
import flash.display.Sprite;
class SizeSelector extends Sprite{
public var size:Number;
public function SizeSelector(d:Number){
size=d;
graphics.beginFill(0xCCCCCC);
graphics.drawCircle(0,0,d/2);
}
}
////////////////////////////////////////
class ColorSelector extends Sprite{
public var color:Number;
public function ColorSelector(clr:Number){
color=clr;
graphics.beginFill(clr);
graphics.drawCircle(0,0,15);
}
}
|