Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как правильно применить заливку, чтобы было залито нутро нарисованной стрелки? (http://www.flasher.ru/forum/showthread.php?t=205670)

Dip52 16.12.2013 04:44

Как правильно применить заливку, чтобы было залито нутро нарисованной стрелки?
 
Вложений: 1
Здравствуйте.

Я нарисовал с помощью graphics стрелку, потом попробовал применить заливку, но получилось так, что заливка вышла за пределы стрелки и пошла в неопределённую (для меня) сторону.

Вложение 30270

Код AS3:

                        const DISTANCE:Number = getDistance();
                        const GRAPHICS:Graphics = arrow.graphics;
                        GRAPHICS.clear();                                                                                                                                                                //Удаление предыдущий рисунков:
                        GRAPHICS.lineStyle(0,0xffffff,1,false,LineScaleMode.NORMAL,CapsStyle.ROUND,JointStyle.MITER);        //Установка стиля линий:
                        GRAPHICS.beginFill(0xFFFFFF);
 
                        const STARTARROWX:Number = BEGINCIRCLEX;                        //Начальная координата по оси x у стрелки:
                        const STARTARROWY:Number = BEGINCIRCLEY+DISTANCE;        //Начальная координата по оси y у стрелки:
                        const ENDARROWX:Number = endCircleX;                                //Конечная координата по оси x у стрелки:
                        const ENDARROWY:Number = endCircleY;                                //Конечная координата по оси y у стрелки:
                        const LENGTHARROW:Number = 30;                                                //Длина стрелки:
                        const WIDTHTARROW:Number = DISTANCE/6;                                //Ширина стрелки:
                        const WIDTHJOININGLINE:Number = DISTANCE/6;                        //Ширина соединяющийся линии:
                        const CORRECTIONWIDTHJOININGLINE:Number = DISTANCE/4;
                        //Нижняя верхняя линия:
                        GRAPHICS.moveTo(STARTARROWX,STARTARROWY);
                        GRAPHICS.curveTo(BEGINCIRCLEX-DISTANCE*2,STARTARROWY-DISTANCE,BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE+WIDTHJOININGLINE);
                        //Соединение верхней и нижней линии в самом начале:
                        GRAPHICS.moveTo(STARTARROWX,STARTARROWY);
                        GRAPHICS.lineTo(STARTARROWX,STARTARROWY+WIDTHTARROW);
                        //Большая верхняя линия:
                        GRAPHICS.moveTo(STARTARROWX,STARTARROWY+WIDTHTARROW);
                        GRAPHICS.curveTo(BEGINCIRCLEX-DISTANCE*2-WIDTHTARROW,STARTARROWY-DISTANCE,BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE-WIDTHJOININGLINE);
                        //Верхнее соединение большой верхней линии с закрывающейся верхней линией:
                        GRAPHICS.moveTo(BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE-WIDTHJOININGLINE);
                        GRAPHICS.lineTo(BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE-CORRECTIONWIDTHJOININGLINE);
                        //Верхняя закрывающаяся линия:
                        GRAPHICS.moveTo(BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE-CORRECTIONWIDTHJOININGLINE);
                        GRAPHICS.lineTo(STARTARROWX,STARTARROWY-DISTANCE*2-WIDTHTARROW/2);
                        //Нижняя закрывающаяся линия:
                        GRAPHICS.moveTo(BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE+CORRECTIONWIDTHJOININGLINE);
                        GRAPHICS.lineTo(STARTARROWX,STARTARROWY-DISTANCE*2-WIDTHTARROW/2);
                        //Нижнее соединение большой нижней линии с закрывающейся нижней линией:
                        GRAPHICS.moveTo(BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE+WIDTHJOININGLINE);
                        GRAPHICS.lineTo(BEGINCIRCLEX-DISTANCE/2,BEGINCIRCLEY-DISTANCE+CORRECTIONWIDTHJOININGLINE);
                        GRAPHICS.endFill();


Wolsh 16.12.2013 04:59

Узлы должны ставиться последовательно, это называется "замкнутый контур". Как будто Вы рисуете, не отрывая карандаш от бумаги, и возвращаетесь в начальную точку.
Команда moveTo должна применяться для перемещения к точке начала рисования контура, а не каждой линии. Команда moveTo разрывает контур, ведь она и означает "не рисовать".

Dip52 16.12.2013 05:37

Спасибо.


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

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