PDA

Просмотр полной версии : Рисование замкнутых фигур


RetSam
23.04.2006, 19:54
Добрый день!

Как мне сделать такую вещь:

Пользователь щелкает мышкой по полю - ставится точка, далее за мышкой ведется прямая до следующего щелчка, где ставится следующая точка и т.д.

И чтобы если конечная точка = первой, то фигура считалась замкнутой и ее можно было залить цветом.

Если кто-то делал что-то подобное - помогите советом, а то я новичок во флеше.

silin
23.04.2006, 20:28
по клику запоминаем координаты, moveTo/lineTo в эти координаты, если близко к первой точке (<tol) заливаем..
lineStyle(0);
var tol=20;
var path=[];
function onMouseUp(){
path.push({x:_xmouse,y:_ymouse});
if(!started){
moveTo(_xmouse,_ymouse);
started=true;
}else{
lineTo(_xmouse,_ymouse);
var dx=_xmouse-path[0].x,dy=_ymouse-path[0].y;
if(Math.sqrt(dx*dx+dy*dy)<tol){
clear();
moveTo(path[path.length-1].x,path[path.length-1].y);
beginFill(0xFF0000);
lineStyle(0,0x00FF00);
for(var i=0;i<path.length;i++)lineTo(path[i].x,path[i].y);
endFill();
}
}
}

RetSam
23.04.2006, 20:58
Спасибо большое! :)

А как все-таки добавить, чтобы линия велась после клика, до тех пор пока не будет замкнута?

silin
23.04.2006, 21:35
перерисовать весь массив (по enterFrame например)
var tol=20;
var path=[];
function onMouseUp(){
var dx=_xmouse-path[0].x,dy=_ymouse-path[0].y;
if(Math.sqrt(dx*dx+dy*dy)<tol){
delete this.onEnterFrame;
clear();
moveTo(_xmouse,_ymouse);
beginFill(0xFF0000);
lineStyle(0,0x00FF00);
for(var i=0;i<path.length;i++)lineTo(path[i].x,path[i].y);
endFill();
}
path.push({x:_xmouse,y:_ymouse});
}
function onEnterFrame(){
clear();
lineStyle(0);
moveTo(path[0].x,path[0].y);
for(var i=1;i<path.length;i++)lineTo(path[i].x,path[i].y);
if(path.length) lineTo(_xmouse,_ymouse);
}

RetSam
23.04.2006, 23:08
Еще если можешь подскажи, как теперь доделать чтобы мышка была бы привязана к точкам (сетке) на поле, чтобы ровно можно было рисовать, т.е. мышка как бы скакала по точкам в сетке и при клике рисовала бы линию.

silin
23.04.2006, 23:27
округляй до размеров сетки..
var tol=20;
var path=[];
var gridStep=10;
function onMouseUp(){
var dx=_xmouse-path[0].x,dy=_ymouse-path[0].y;
if(Math.sqrt(dx*dx+dy*dy)<tol){
delete this.onEnterFrame;
clear();
moveTo(_xmouse,_ymouse);
beginFill(0xFF0000);
lineStyle(0,0x00FF00);
for(var i=0;i<path.length;i++)lineTo(path[i].x,path[i].y);
endFill();
}
path.push({x:gridStep*Math.round(_xmouse/gridStep),y:gridStep*Math.round(_ymouse/gridStep)});
}
function onEnterFrame(){
clear();
lineStyle(0);
moveTo(path[0].x,path[0].y);
for(var i=1;i<path.length;i++)lineTo(path[i].x,path[i].y);
if(path.length) lineTo(gridStep*Math.round(_xmouse/gridStep),gridStep*Math.round(_ymouse/gridStep));
}
мышкой двигает юзер, заставить ее скакать по сетке нельзя..
можно ее скрыть Mouse.hide(), а двигать вместо нее свой курсор (мувик)..

motor4ik
24.04.2006, 12:13
а я то думал. что - то пером знакомым написано :)