Кривые Безье в As3 - PullRequest
       15

Кривые Безье в As3

0 голосов
/ 14 апреля 2011

Прав ли я, полагая, что из Flash GUI вы можете рисовать только кубические кривые Безье, а из ActionScript вы можете рисовать только квадратичные кривые Безье? Действительно?

Кажется, ну ... я уверен, что это не может быть ... Было бы сумасшествием, если бы мне пришлось написать приложение для рисования Quadratic Bezier, чтобы определить координаты точек.

Ответы [ 3 ]

4 голосов
/ 14 апреля 2011

Если вы используете API рисования, вы можете рисовать только квадратичные кривые Безье, используя функцию curveTo ().http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#curveTo()

Для правильных кривых Безье это не так сложно, но вам придется сделать это самостоятельно.Несколько быстрых ссылок с исходным кодом, которые я нашел: http://www.paultondeur.com/2008/03/09/drawing-a-cubic-bezier-curve-using-actionscript-3/

http://www.farmcode.org/post/2009/07/06/Fast-2D-Bezier-Library-for-ActionScript-3.aspx

3 голосов
/ 05 октября 2011

На самом деле из Flash Player 11, выпущенного вчера, API рисования поддерживает кривые Кубического Безье:

(среди прочих улучшений и дополнений в этом основном выпуске ...)

http://www.adobe.com/devnet/flashplayer/articles/whats-new-flash-player11.html

1 голос
/ 05 сентября 2013

Это отличный пост для рисования кривых Кубического Безье в ActionScript с использованием класса fl.motion.BezierSegment:

http://www.eleqtriq.com/2010/04/cubic-bezier-in-flash/

Это потрясающе - я создал полную кривую с несколькими сегментамис частью кода и классов, которые вам нужны для большинства других ссылок на этой странице:

var resolution  :uint       = 50;
var step        :Number     = 1/resolution;

function drawCurve(p0:Point, c0:Point, c1:Point, p1:Point)
{
    var bezier  :BezierSegment  = new BezierSegment(p0, c0, c1, p1);
    var t       :Number         = 0;
    while (t <= 1)
    {
        var pt:Point = bezier.getValue(t);
        with (graphics)
        {
            lineStyle(0.1, 0x00FFFF);
            t == 0
                ? moveTo(pt.x, pt.y)
                : lineTo(pt.x, pt.y);
        }
        t+=step;
    }   
    pt = bezier.getValue(1);
    graphics.lineTo(pt.x, pt.y);    
}

Это действительно отличный пост!

...