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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
примерная схема
Код:
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Point;

	public class  Test extends Sprite{
		private var render:Function=myNull;
		private var canvas:Sprite;
		private var pen:Point;
		private var maxLength:Number=7;
		private var drawBut:But;
		private var clearBut:But;
		public function Test(){
			canvas=new Sprite();
			canvas.graphics.beginFill(0xCCCCCC);
			canvas.graphics.drawRect(0,0,550,400);
			addChild(canvas);
			drawBut=new But("draw");
			addChild(drawBut);
			clearBut=new But("clear");
			clearBut.x=drawBut.width+10;
			
			addChild(clearBut);
			drawBut.addEventListener(MouseEvent.CLICK,drawClick);
			clearBut.addEventListener(MouseEvent.CLICK,clearClick);
			canvas.addEventListener(MouseEvent.MOUSE_DOWN,startRender);
			canvas.addEventListener(MouseEvent.MOUSE_UP,stopRender);
		}
		private function drawClick(evnt:MouseEvent):void{
			render=myDraw;
			drawBut.backgroundColor=0xFFFFFF;
			clearBut.backgroundColor=0x999999;
		}
		private function clearClick(evnt:MouseEvent):void{
			render=myClear;
			drawBut.backgroundColor=0x999999;
			clearBut.backgroundColor=0xFFFFFF;
		}
		
		private function startRender(evnt:MouseEvent):void{
			canvas.addEventListener(MouseEvent.MOUSE_MOVE,render);
			pen=new Point(mouseX,mouseY);
		}
		private function stopRender(vnt:MouseEvent):void{
			canvas.removeEventListener(MouseEvent.MOUSE_MOVE,render);
		}
		private function myDraw(evnt:MouseEvent):void{
			var p:Point=new Point(mouseX,mouseY);
			//рисуем только больше минимальной длины..
			if(Point.distance(p,pen)>=maxLength){
				var s:Sprite=new Sprite();
				canvas.addChild(s);
				s.graphics.lineStyle(1,0xFF0000);
				s.graphics.moveTo(pen.x,pen.y);
				s.graphics.lineTo(mouseX,mouseY);
				pen=p;
			}
		}
		private function myClear(evnt:MouseEvent):void{
			for(var i:int=0;i<canvas.numChildren;i++){
				var line:Sprite=canvas.getChildAt(i) as Sprite;
				if(line.hitTestPoint(mouseX,mouseY)) canvas.removeChild(line);
			}
		}
		private function myNull(evnt:MouseEvent):void{
		}
	}
}

import flash.text.TextField;
class But extends TextField{
	public function But(txt:String){
		text=txt;
		autoSize="left";
		selectable=false;
		background=true;
		backgroundColor=0x999999;
	}
}