Показать сообщение отдельно
Старый 13.05.2008, 02:49
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 2  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
не совсем то что тебе надо, тут точки не сглаживаются, просто слишком частые игнорируются ))
а по сглаживанию тут поищи
Код:
package  
{
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	
	/**
	* ...
	* @author Oleg Kucherenko
	*/
	public class DrawCurve extends Sprite
	{
		private var newPoint:Point;
		private var anchorPoint:Point;
		private var controlPoint:Point;
		private var dots:Sprite;
		
		
		/**
		 * Constructor
		 */
		public function DrawCurve() 
		{
			graphics.lineStyle(4);
			
			dots = new Sprite();
			addChild(dots);
			
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
		}
		
		
		/**
		 * Show/hide dots
		 */
		private function onKeyDown(e:KeyboardEvent):void 
		{
			dots.visible = !dots.visible;
		}
		
		
		/**
		 * MOUSE_DOWN event handler
		 */
		private function onMouseDown(e:MouseEvent):void 
		{
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
			anchorPoint = new Point(e.localX, e.localY);
			controlPoint = anchorPoint.clone();
			graphics.moveTo(anchorPoint.x, anchorPoint.y);
			
			// start curve
			drawCurve(new Point(e.localX, e.localY));
		}
		
		
		/**
		 * MOUSE_UP event handler
		 */
		private function onMouseUp(e:MouseEvent):void 
		{
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
			
			// finish curve
			drawCurve(new Point(e.localX, e.localY));
			drawCurve(new Point(e.localX, e.localY));
		}
		
		
		/**
		 * MOUSE_MOVE event handler
		 */
		private function onMouseMove(e:MouseEvent):void 
		{
			newPoint = new Point(e.localX, e.localY);
			if (newPoint.subtract(anchorPoint).length > 32) 
				drawCurve(newPoint);
		}
		
		
		/**
		 * Draw curve
		 */
		private function drawCurve(newPoint:Point):void 
		{
			drawDot(newPoint);
			
			anchorPoint = controlPoint.add(newPoint);
			anchorPoint.x /= 2;
			anchorPoint.y /= 2;
			
			graphics.curveTo(controlPoint.x, controlPoint.y, anchorPoint.x, anchorPoint.y);
			
			controlPoint = newPoint;
		}
		
		
		/**
		 * Draw dot
		 */
		private function drawDot(position:Point):void 
		{
			var shape:Shape = new Shape();
			shape.graphics.lineStyle(0);
			shape.graphics.beginFill(0xFFFFFF);
			shape.graphics.drawCircle(0, 0, 2.5);
			shape.graphics.endFill();
			shape.graphics.lineStyle();
			dots.addChild(shape);
			shape.x = position.x;
			shape.y = position.y;
		}
		
	}
	
}


Последний раз редактировалось badun; 13.05.2008 в 02:56.