Показать сообщение отдельно
Старый 25.07.2007, 21:47
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 19  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
с битмапом, канеш удобнее..
как вариант: рисовать в невидимом шейпе, который срисовывать в битмап с разным блендМод, в зависимости от режима рисования или стерки:

Код:
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);
	}
}