PDA

Просмотр полной версии : Как зделать, чтобы в рисовалке не заламывались линии при быстром перемещении мыши?


джонатан
10.11.2008, 12:10
Добрый день! Вот делаю рисовалку, и всегда у меня линии при быстром движении мыши, заламываются. Попробовал двумя способами, и все впустую.

1)


var stoke:Number = 2;
var alpha:Number = 100;
var color:Number = 0xFF0000;
var color2:Number = 0x000000;
var drawing:Boolean = false;
var mLst:Object = new Object();


Mouse.hide();
crop.startDrag(true, 0, 0, Stage.width, Stage.height);

this.lineStyle(stoke, color, alpha);
place.lineStyle(stoke, color2, alpha);

mLst.onMouseDown = function() {
drawing = true;
_root.moveTo(_xmouse, _ymouse);
}

mLst.onMouseUp = function() {
drawing = false;
}

mLst.onMouseMove = function() {
if(drawing) {
_root.lineTo(_xmouse, _ymouse);
}
updateAfterEvent();
}

Mouse.addListener(mLst);


2)


var stoke:Number = 2;
var alpha:Number = 100;
var color:Number = 0xFF0000;
var color2:Number = 0x000000;
var drawing:Boolean = false;
var mLst:Object = new Object();


Mouse.hide();
crop.startDrag(true, 0, 0, Stage.width, Stage.height);

this.lineStyle(stoke, color, alpha);
place.lineStyle(stoke, color2, alpha);

mLst.onMouseDown = function() {
drawing = true;
_root.moveTo(_xmouse, _ymouse);
sss = setInterval(Drawing, 1);
}

mLst.onMouseUp = function() {
drawing = false;
clearInterval(sss);
}

function Drawing() {
if(drawing) {
_root.lineTo(_xmouse, _ymouse);
}
}
Mouse.addListener(mLst);


Различие в том, что я заменил onMouseMove а setInterval т.к. у певрого, обновление происходит ~ раз в 50 миллисекунд, а во втором, я заставил обновляться каждую 1 миллисекунду. Но заметных отличий, в итоге не видно.

http://img146.**************/img146/8576/lomxm4.jpg

Быть может кто-то делал, нечто подобное? Помогите пожалуйста.
Спасибо.

Division
10.11.2008, 13:06
Сам такого не делал, но думаю можно попробовать заюзать curveTo. Или самому реализовать, кривые Безье например.

джонатан
10.11.2008, 13:17
curveTo либо некатят, либо я слишком хреново знаю матемшу. Разници вообще не заметил:


var n = 1;
var drawing = false;
var xStart
var yStart

_root.onMouseDown = function() {
if (_ymouse<400) {
_root.lineStyle(th, rgb, al);
_root.moveTo(_xmouse, _ymouse);
xStart = _xmouse;
yStart = _ymouse;
Dr = true;
Mouse.hide();
_root.attachMovie("pen", "pen", 0);
pen.startDrag(true);
}
}

_root.onMouseUp = function() {
drawing = false;
n = 1;
pen.removeMovieClip();
Mouse.show();
}

_root.onMouseMove = function() {
if (drawing) {
if (n == 1) {
Xpos = _xmouse;
Ypos = _ymouse;
n = 2;
} else {
var xSr = (_xmouse+xStart)/2;
var ySr = (_ymouse+yStart)/2;
var ControlX = 2*Xpos-xSr;
var ControlY = 2*Ypos-ySr;
_root.curveTo(ControlX, ControlY, _xmouse, _ymouse);
n = 1;
}
}
xStart = _xmouse;
yStart = _ymouse;
}


А что такое кривые Безье?

Division
10.11.2008, 13:20
http://ru.wikipedia.org/wiki/Кривая_Безье
Сейчас нету времени посмотреть твой код, быть может под вечер смогу. Хотя обещать не буду.