Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Рисование замкнутых фигур (http://www.flasher.ru/forum/showthread.php?t=78728)

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

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


Часовой пояс GMT +4, время: 18:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.