Форум 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)
-   -   Как нарисовать пунктирную линию путем AS2? (http://www.flasher.ru/forum/showthread.php?t=88461)

Vietnam 23.11.2006 22:22

Как нарисовать пунктирную линию путем AS2?
 
Можно ли в AS2 нарисовать линии, такие как при рисовании линий путем инструмента "Line Tool"? например прерывистый пунктир или линия точками!?

Даня 23.11.2006 23:55

Помоему метода такого нет. Единственная функция, которая есть это lineStyle(), но там тока толщина , альфа и цвет RGB. Тебе придётся запустить цикл и прирывесто использовать lineTo. Хотя я склонен ошибаться... просто в справочниках не встречал.

etc 24.11.2006 00:27

Можно нарисовать через BitmapData, но это не совсем то, что требуется.
Если кратко: можно, но нужно писать свою функцию.

Fl00r 24.11.2006 00:58

можно кандовенько так
Код:

//координаты начала и конца
xpos1 = 10; xpos2 = 500; ypos1 = 10; ypos2 = 100;
//Длина штриха
d = 10;
//Длина промежутка
p = 10;

this.createEmptyMovieClip("line_mc2", this.getNextHighestDepth());
line_mc2.lineStyle(1, 0x000);
line_mc2.moveTo(xpos1, ypos1);
line_mc2.lineTo(xpos2, ypos2);

this.createEmptyMovieClip("line_mc", this.getNextHighestDepth());
line_mc.lineStyle(5, 0x995);
line_mc.moveTo(xpos1, ypos1);
//длина линии
ln = Math.sqrt((xpos2-xpos1)*(xpos2-xpos1) + (ypos2 - ypos1)*(ypos2 - ypos1));
//синус косинус
sin = (ypos2 - ypos1)/ln;
cos = (xpos2 - xpos1)/ln;
for(i=0; (i+1)*(d+p)*cos<=ln*cos; i++){
        xpos1 += d*cos; ypos1 += d*sin;
        line_mc.lineTo(xpos1, ypos1);
        xpos1 += p*cos; ypos1 += p*sin;
        line_mc.moveTo(xpos1, ypos1);
}
line_mc.lineTo(xpos2, ypos2);


flash33 24.11.2006 00:59

Код:

this.lineStyle(1, 0xff0000, 100);
this.moveTo(10, 10);
i = 10; w = 400;
while (i < w){
this.lineTo(i+=5, 10);
this.moveTo(i+=5, 10);
}

некондовенько

Fl00r 24.11.2006 01:05

Ну... А где координаты, длина штриха и промежутка? Это слишком просто.

etc 24.11.2006 01:46

Fl00r, пожалуйста:
Код:

drawDashLine = function(target_mc,x1,y1,x2,y2,step,width) {
        var xd = x2-x1;
        var yd = y2-y1;
        var dist = Math.sqrt(xd*xd+yd*yd);
        var steps = Math.round(dist/step);
        var xe = width*xd/dist;
        var ye = width*yd/dist;
        for (var i=0;i<steps;i++) {
                var x = x1+i/steps*xd;
                var y = y1+i/steps*yd;
                target_mc.moveTo(x,y);
                target_mc.lineTo(x+xe,y+ye);
        }
}

Не проверял (писал прям в окне), но работать должно…

Fl00r 24.11.2006 02:13

Не. Лучше проверь.
2 ошибки (не синтаксических)

etc 24.11.2006 02:23

Не вижу. Покажи.
То, что надо lineStyle задать — это, я думал, вы сами догадаетесь…

Fl00r 24.11.2006 02:40

lineStyle — 1. Догадался конечно

Так
Код:

drawDashLine = function(target_mc,x1,y1,x2,y2,step,width) {
        var xd = x2-x1;
        var yd = y2-y1;
        var dist = Math.sqrt(xd*xd+yd*yd);
        var steps = Math.round(dist/(step+width));
        var cos = xd/dist;
        var sin = yd/dist;
        var xe = width*cos;
        var ye = width*sin
        for (var i=0;i<steps;i++) {
                var x = x1+i*(step+width)*cos;
                var y = y1+i*(step+width)*sin;
                target_mc.lineStyle(1, 0x000000);
                target_mc.moveTo(x,y);
                target_mc.lineTo(x+xe,y+ye);
        }
        target_mc.lineTo(x2,y2)
}



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

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