|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
3p.station, вы бы давали лучше ссылки на источник, тем более, что там принцип объясняется.
http://www.flashandmath.com/advanced/smoothdraw/ К тому же, до этой либы появилась эта, с более богатыми возможностями: http://en.nicoptere.net/?p=476 Принцип у них похож, но реализация разная. |
|
|||||
Регистрация: Apr 2010
Сообщений: 82
|
Крестиком обозначены положения курсора.
|
|
|||||
Если кисть с точками - это отдельный контейнер, то может его поворачивать на новое положение мышки, а затем перемещать самого. Но сам курсор двигается довольно быстро, и гладкого поворота не получился, может если рисование сделать через интервал какой нибудь.
Этот код поворачивает кисть на мышку и перемещается на её положение, в общем ничего нового....: |
|
|||||
Регистрация: Apr 2010
Сообщений: 82
|
3p.station, не совсем. У меня вот так!
|
|
|||||
Регистрация: Apr 2010
Сообщений: 82
|
..........
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Дык у того, что на рисунке минусы будут забавные, вот нарисуйте лесенку) Ну чо, обещал код - вот.
Мэйн и собсно рисовалка, два таки класса, в один некочепыжно всяко %) package { import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.geom.Point; import flash.text.TextField; import flash.utils.*; /** * ... * @author De */ public class Main extends Sprite { public var s:Sprite = new Sprite(); public var tb:TehBrush = new TehBrush(); public var mdown:Boolean = false; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); addChild(s); tb.addPoint(new Point(0, 0));//точки, из которых состоит кисть tb.addPoint(new Point(10, 10)); tb.addPoint(new Point(-10, 10)); tb.addPoint(new Point(10, -10)); tb.addPoint(new Point(-10, -10)); stage.addEventListener(MouseEvent.MOUSE_DOWN, doDown); stage.addEventListener(MouseEvent.MOUSE_UP, doUp); stage.addEventListener(MouseEvent.MOUSE_MOVE, doMove); } private function doMove(ev:MouseEvent):void { if (mdown) { s.graphics.clear(); s.graphics.lineStyle(0); tb.addPathPos(mouseX, mouseY); tb.drawPath(s); } } private function doDown(ev:MouseEvent):void { mdown = true; } private function doUp(ev:MouseEvent):void { mdown = false; } } } package { import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Point; /** * ... * @author De */ public class TehBrush { private var points:Vector.<Point> = new Vector.<Point>(); private var path:Vector.<Point> = new Vector.<Point>(); //private var m:Matrix = new Matrix(); public function TehBrush() { } public function addPoint(p:Point):void { points.push(p); } public function addPathPos(mx:Number, my:Number):void { path.push(new Point(mx, my)); } public function drawPath(s:Sprite):void { for (var j:int = 0; j < points.length; ++j) { var p:Point = points[j]; for (var i:int = 0; i < path.length - 1; ++i) { var v:Point = path[i+1].subtract(path[i]); var vLength:Number = v.length; var sin:Number = v.y / vLength; var cos:Number = v.x / vLength; var posX:Number = path[i+1].x + p.x * cos + p.y * sin; var posY:Number = path[i + 1].y + p.y * cos - p.x * sin;//МЕГОВРОЩЕНИЕ if (i == 0) { s.graphics.moveTo(path[0].x + p.x * cos + p.y * sin, path[0].y + p.y * cos - p.x * sin); } s.graphics.lineTo(posX, posY); //trace(posX, posY); } } } } }
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Регистрация: Apr 2010
Сообщений: 82
|
-De-, не мог бы ты чуть прокомментировать суть собственно метода. я плохо разбираюсь в чужом коде((
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
evgen4ik, чукча не читатель? %)
Ну как на картинке работает. Если оно вместо того, чтоб повернуть вниз, повернуло бы вверх, то случилось бы пересечение траектории с отрисовываемой линией, например) Ну попробую рассказать про drawPath функцию, собсно делает чо надо. Есть там векторы (если пугает слово вектор, то считать, что это массив просто) points и path в которых сидят точки. path - это путь мыши. points - точки кисти. var v:Point - куда направлен очередной отрезок пути мыши, считаем синус и косинус угла этого отрезка (который он образует с осью Ох). Дальше считаем очередную позицию точки, в которую переместилась точка кисти (posX, posY). Это координаты конца очередного отрезка пути мыши, плюс точка кисти, повернутая на тот же угол, на который повернут этот наш отрезок пути мыши. Ну и первую точку ставим так же, как и остальные, только вместо координат конца отрезка мыши используем координаты начала (это тот дурной if, найди 10 отличий от posX, posY).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
Часовой пояс GMT +4, время: 17:06. |
|
« Предыдущая тема | Следующая тема » |
|
|