Как создать вертикальный цветовой градиент (или любой другой угол, кроме плоского горизонтального градиента)
-
23-09-2019 - |
Вопрос
Привет всем, я впервые пытаюсь нарисовать многоцветный градиент в 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);
Решение
Эта строка кода возвращает значение вращения в ноль:
matr.createGradientBox(200, 200, 0, 0, 1);
Если вы посмотрите на параметры, принимаемые функцией, вы увидите, что третий параметр — вращение.Итак, попробуйте следующее:
matr.createGradientBox(200, 200, Math.PI/9, 0, 1);
Кроме того, есть ли причина, по которой вы переводите значение y на 1 пиксель?
Надеюсь это поможет.Удачи!
Другие советы
попробуйте изменить порядок этих двух строк, так что это будет:
matr.createGradientBox(200, 200, 0, 0, 1);
matr.rotate((Math.PI/180)*90);
Если вы много рисуете, вам также стоит попробовать degrafa.