ActionScript - Обтекание экрана градиентной линией? - PullRequest
0 голосов
/ 05 февраля 2011

У меня есть прямая линия градиента, которая проходит от одного конца экрана к другому.

Каков наилучший (или единственный) подход для обтекания экрана этой линейной графикой, чтобы она выглядела какПеремещение?

Мое текущее " решение " - нарисовать горизонтальную линию с удвоенной шириной экрана и продублировать шаблон градиента для каждой половины линии.Линия зарегистрирована в центре и сдвинута вправо.Как только половина линии пересекает стадию, линия возвращается в исходную точку.

Есть ли лучший способ?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2011

Вы можете нарисовать и анимировать градиентную линию следующим образом:

package  
{
import flash.display.GradientType;
import flash.display.InterpolationMethod;
import flash.display.SpreadMethod;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;

public class GradientLine extends Sprite 
{
    private var position:Number = 0;

    public function GradientLine() 
    {
        addEventListener( Event.ENTER_FRAME, drawLine );
    }

    private function drawLine(e:Event):void 
    {
        graphics.clear();

        var m:Matrix = new Matrix();
        m.createGradientBox( stage.stageWidth, stage.stageHeight, 0, position, 0 );

        position -= 10;//move from right to left by 10px

        graphics.lineStyle( 2 );
        graphics.lineGradientStyle( GradientType.LINEAR, [ 0xFF0000, 0xFFCC00, 0x0000CC ], [ 1, 1, 1 ], [ 0, 128, 255 ], m, SpreadMethod.REFLECT, InterpolationMethod.RGB, position );

        graphics.moveTo( 0, 250 );
        graphics.lineTo( stage.stageWidth, 250 );
    }
}
}

сцена должна быть доступна.Вы можете установить createGradientBox (ширина, высота) на нужный вам размер.SpreadMethod.REFLECT вызывает отражение градиента, вы можете попробовать SpreadMethod.REPEAT.

1 голос
/ 05 февраля 2011

Ну, единственная альтернатива, которую я могу придумать, - это использовать API рисования для рисования градиентного штриха, вычисляя смещение в каждом кадре.Но это определенно будет дороже, чем просто применить позиционное преобразование к экранному объекту.Немного арифметики должно быть достаточно, чтобы сделать его медленнее.

Ваше предлагаемое решение может показаться не слишком элегантным или эффективным , но, поскольку мы работаем вВМ очень оптимизирована для рисования и преобразования закрытых векторов и растровых изображений (и действительно не зависит от любой другой оптимизации). Я думаю, что лучшим вариантом было бы просто доверять ВМ на данном этапе.:)

...