![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2006
Сообщений: 19
|
Добрый день!
Как мне сделать такую вещь: Пользователь щелкает мышкой по полю - ставится точка, далее за мышкой ведется прямая до следующего щелчка, где ставится следующая точка и т.д. И чтобы если конечная точка = первой, то фигура считалась замкнутой и ее можно было залить цветом. Если кто-то делал что-то подобное - помогите советом, а то я новичок во флеше. |
|
|||||
|
по клику запоминаем координаты, 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();
}
}
}
|
|
|||||
|
Регистрация: Apr 2006
Сообщений: 19
|
Спасибо большое!
![]() А как все-таки добавить, чтобы линия велась после клика, до тех пор пока не будет замкнута? |
|
|||||
|
перерисовать весь массив (по 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);
}
|
|
|||||
|
Регистрация: Apr 2006
Сообщений: 19
|
Еще если можешь подскажи, как теперь доделать чтобы мышка была бы привязана к точкам (сетке) на поле, чтобы ровно можно было рисовать, т.е. мышка как бы скакала по точкам в сетке и при клике рисовала бы линию.
|
|
|||||
|
округляй до размеров сетки..
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(), а двигать вместо нее свой курсор (мувик).. |
|
|||||
|
Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
|
а я то думал. что - то пером знакомым написано
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|