Форум 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)
-   -   as1, как оптимизировать рисование API? (http://www.flasher.ru/forum/showthread.php?t=70801)

Mnilionic 22.10.2005 02:48

as1, как оптимизировать рисование API?
 
хочу добавить к чату возможность рисовать. Но при рисовании, того же кружка, нужно отправить координат на полтора килобайта.
Как бы это так оптимизировать в кривые безье? На подобе, как это сглаживается при использовании интсрумента "карандаш" на рабочей сцене флэша.
ну или как-нить подругому. Спасибо.

iNils 22.10.2005 12:25

Код:

MovieClip.prototype.drawArc = function(x, y, radius, arc, startAngle, yRadius) {
        //// ==============
        //// mc.drawArc() - by Ric Ewing (ric@formequalsfunction.com) - version 1.5 - 4.7.2002
        ////
        //// x, y = текущее положение курсора рисования
        //// radius = радиус арки. Если yRadius не указан, то он равен radius
        //// arc = длина арки в градусах. отрицательное значение задают арку против часовой стрелки.
        //// startAngle = начальный угол в градусах.
        //// yRadius = y - радиус арки
        //// ==============
        if (arguments.length < 5) {
                return;
        }
        // если yRadius неопределен, yRadius = radius
        if (yRadius == undefined) {
                yRadius = radius;
        }
        var segAngle, theta, angle, angleMid, segs, ax, ay, bx, by, cx, cy;
        //// рисуем только то что нужно :)
        if (Math.abs (arc) > 360) {
                arc = 360;
        }
        //// Flash использует 8 сегментов на круг, каждый максимум по 45 градусов. Сначала вычисляем количество необходимых сегментов
        segs = Math.ceil (Math.abs (arc) / 45);
        // теперь вычисляем длину арки для каждого сегмента
        segAngle = arc / segs;
        //// Конвертируем градусы в радианы
        theta = -(segAngle / 180) * Math.PI;
        //// Конвертируем начальный угол в радианы
        angle = -(startAngle / 180) * Math.PI;
        //// Находим стартовую точку (ax,ay) относительно заданных x,y
        ax = x - Math.cos (angle) * radius;
        ay = y - Math.sin (angle) * yRadius;
        //// если арка больеше чем 45 градусов, draw as 45 degree segments so that we match Flash's native circle routines.
        if (segs > 0) {
                //// Зацилкиваем рисование сегментов
                for (var i = 0; i < segs; i++) {
                        //// увеличиваем угол
                        angle += theta;
                        //// находим угол на середине пути между конечными точками арки
                        angleMid = angle - (theta / 2);
                        //// вычисляем координаты конечной точки
                        bx = ax + Math.cos (angle) * radius;
                        by = ay + Math.sin (angle) * yRadius;
                        //// вычисляем координаты контрольной точки
                        cx = ax + Math.cos (angleMid) * (radius / Math.cos (theta / 2));
                        cy = ay + Math.sin (angleMid) * (yRadius / Math.cos (theta / 2));
                        //// рисуем сегмент
                        this.curveTo (cx, cy, bx, by);
                }
        }
        //// возвращяемм координаты конечной точки
        return {x:bx, y:by};
};


Mnilionic 23.10.2005 02:44

эээ.. и как этой функцией пользоваться? у меня для обработки есть только координаты мыши... без всяких радиусов и прочих элементов.

iNils 23.10.2005 03:21

Не внимательно вопрос прочитал :) Думал тебе нужно круг рисовать, а тебе сглаживание нужно :)

Mnilionic 23.10.2005 04:10

бывает :)


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

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