разоблачить овал как часы - PullRequest
1 голос
/ 04 января 2011

У меня есть форма круга, и я хотел бы добиться, чтобы он был замаскирован, а затем вошел в кадр, он должен быть разоблачен как часы, поэтому вы можете видеть от 0 до 1, затем от 0 до 2, 0до 3 и т. д., я знаю, что это должно быть сделано с радиантами и т. д., но математика на самом деле не моя чашка чая.Есть идеи?

1 Ответ

1 голос
/ 04 января 2011

Шаг 1: Создайте маску Sprite для вашей фигуры

Шаг 2: Рассчитайте необходимый угол:

var endAngle:Number = 360 / 12 * clockTime;

, где clockTime - ваши часы.Для минут используйте 360 / 60.

Шаг 3: Обновите маску на ENTER_FRAME

Вы должны нарисовать круговую часть, используя CurveTo.Используйте maskSprite.graphics.clear() и maskSprite.graphics.beginFill(0,1), затем позвоните:

function drawClockSlice (sprite : Sprite, centerX : Number, centerY : Number, endAngle : Number, radius : Number) : void
{
    var g : Graphics = sprite.graphics;
    var controlPoint : Point;
    var anchorPoint : Point;

    var startRadians:Number = Math.PI / 180 * -90;
    var endRadians : Number = Math.PI / 180 * (endAngle-90);

    var difference : Number = Math.abs( endRadians - startRadians );
    var divisions : Number = Math.floor( difference / (Math.PI / 4) ) + 1;
    var span : Number = difference / (2 * divisions);
    var controlRadius : Number = radius / Math.cos( span );

    g.moveTo(centerX, centerY);
    g.lineTo(centerX + (Math.cos( startRadians ) * radius), centerY + Math.sin( startRadians ) * radius );

    for (var i : Number = 0; i < divisions; ++i)
    {
        endRadians = startRadians + span;
        startRadians = endRadians + span;
        controlPoint = new Point( centerX + Math.cos( endRadians ) * controlRadius, centerY + Math.sin( endRadians ) * controlRadius );
        anchorPoint = new Point( centerX + Math.cos( startRadians ) * radius, centerY + Math.sin( startRadians ) * radius );
        g.curveTo( controlPoint.x, controlPoint.y, anchorPoint.x, anchorPoint.y );
    }
    g.lineTo( centerX, centerY );
}

(я взял и отредактировал приведенный выше код из соответствующего примера с помощью meddlingwithfir )

Не забывайте свой endFill()!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...