Как создать вертикальный цветовой градиент (или любой другой угол, кроме плоского горизонтального градиента)

Привет всем, я впервые пытаюсь нарисовать многоцветный градиент в actionscript 3.

Итак, я получил этот код от справочные документы, но я не могу получить вертикальный градиент, какую бы формулу или число я ни использовал для поворота, он остается на горизонтальном градиенте по умолчанию :(

Мой код:

Вы можете видеть в трассировках код поворота, который я пробовал...

package
{
import flash.display.DisplayObject;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.display.MovieClip;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.display.Shape;
import flash.geom.Matrix;
import flash.events.*;

public class MyGradient extends MovieClip
{
    private var colorHolder:MovieClip = new MovieClip();
    private var colorGrad:MovieClip = new MovieClip();
    private var fillType:String     = GradientType.LINEAR;
    private var colors:Array        = [0xFF0000, 0x4F8EEC];
    private var alphas:Array        = [1, 1];
    private var ratios:Array        = [0x00, 0xFF];
    private var matr:Matrix         = new Matrix();
    private var spreadMethod:String = SpreadMethod.PAD;


    public function MyGradient():void
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init():void
    {
        colorHolder = new MovieClip();
        colorGrad   = new MovieClip();

        //matr.rotate(30*Math.PI/180);
        //matr.rotate(45);
        //matr.rotate(90);
        //matr.rotate(Math.PI/90);
        matr.rotate(Math.PI/9);
        matr.createGradientBox(200, 200, 0, 0, 1);
        colorGrad.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);        
        colorGrad.graphics.drawRect(0,0,200,200);

        colorHolder.addChild(colorGrad);
        addChild(colorHolder);
        }

    }

}

Обновлено исправление от при активном участии:

matr.createGradientBox(200, 200, Math.PI/2, 0, 0);

alt text


person Leon Gaban    schedule 02.03.2010    source источник


Ответы (3)


Эта строка кода возвращает значение поворота к нулю:

matr.createGradientBox(200, 200, 0, 0, 1);

Если вы посмотрите на параметры, принимаемые функцией, вы увидите, что третий параметр — это вращение. Итак, попробуйте следующее:

matr.createGradientBox(200, 200, Math.PI/9, 0, 1);

Кроме того, есть ли причина, по которой вы переводите значение y на 1 пиксель?

Надеюсь это поможет. Удачи!

person heavilyinvolved    schedule 02.03.2010
comment
Ах, сладкий! :D Почему /9 делает градиент 45 градусов? Я пробовал другие числа, но все еще не могу получить прямой вертикальный градиент вверх и вниз :( О, и y = 1 я просто застрял там без причины - person Leon Gaban; 02.03.2010
comment
Если вам нужен градиент сверху вниз, используйте Math.PI/2. Это потому, что класс Matrix ожидает это значение в радианах. Это очень удобно иметь рядом с компьютером: upload.wikimedia.org/wikipedia/commons/thumb/9/9a/ - person heavilyinvolved; 02.03.2010

попробуйте изменить порядок этих двух строк, чтобы это было:

matr.createGradientBox(200, 200, 0, 0, 1);
matr.rotate((Math.PI/180)*90);
person a--m    schedule 02.03.2010

Если вы много рисуете, вам также следует проверить degrafa.

http://www.degrafa.org/

person ablerman    schedule 02.03.2010
comment
Я еще не перешел на Flex, думаю, просто жду следующей версии Flash Builder, но спасибо, я отметил ее :) - person Leon Gaban; 02.03.2010