Проблема с линейным градиентом вращения Flash AS3 - PullRequest
1 голос
/ 27 октября 2011

Это мой первый пост здесь, поэтому я надеюсь, что я все понял правильно и найду ответ на мою проблему.

Во Flash AS3 я создаю динамический градиент в прямоугольнике. Мне нужно, чтобы градиент имел угол поворота 26 градусов. Моя проблема в том, что вращение, кажется, меняется в зависимости от ширины / высоты моего прямоугольника. Мне нужно, чтобы угол поворота был истинным на 26 градусов независимо от того, к какому размеру я его применяю

Вот код, который я использую:

var rect:Shape=new Shape();
this.addChild(rect);
rect.x=40;
rect.y=70;
var rectWidth:Number=200;
var rectHeight:Number=100;

drawShapes();

function drawShapes():void {
var mat:Matrix;
var colors:Array;
var alphas:Array;
var ratios:Array;
//We proceed to draw 'rect'.
mat=new Matrix();
colors=[0xFF0000, 0x00FF00, 0x001eff];
alphas=[1,1,1];
ratios=[0,120,255];

mat.createGradientBox(rectWidth,rectHeight,toRad(26));
rect.graphics.lineStyle();
rect.graphics.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,mat);
rect.graphics.drawRect(0,0,rectWidth,rectHeight);
rect.graphics.endFill();
}

function toRad(a:Number):Number {
return a*Math.PI/180;
}

1 Ответ

0 голосов
/ 27 октября 2011

Ваша проблема в этой строке:

mat.createGradientBox(rectWidth,rectHeight,toRad(26));

Ваш градиент изменится, если изменятся размеры окна градиента. Если вы хотите, чтобы у вашего градиента всегда был один и тот же угол, сохраняйте одинаковые размеры градиента, независимо от размеров вашего прямоугольника. Чтобы получить градиент под углом 26 градусов (или что-то еще), я бы также попытался создать квадратную градиентную рамку, иначе угол линий градиента и угол поворота не будут равны.

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

import flash.display.Shape;

var rect:Shape;
var gradSize:uint = 100;

for(var i:uint=0;i<3;i++)
{
    rect = new Shape();
    this.addChild(rect);
    rect.x=20;
    rect.y=i*100+10;
    var rectWidth:Number=100+i*50;
    var rectHeight:Number=50;

    drawShapes(rect);
}

function drawShapes(rect:Shape):void
{
    var mat:Matrix;
    var colors:Array;
    var alphas:Array;
    var ratios:Array;
    //We proceed to draw 'rect'.
    mat=new Matrix();
    colors=[0xFF0000, 0x00FF00, 0x001eff];
    alphas=[1,1,1];
    ratios=[0,120,255];

    mat.createGradientBox(gradSize,gradSize,toRad(26));
    rect.graphics.lineStyle();
    rect.graphics.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,mat);
    rect.graphics.drawRect(0,0,rectWidth,rectHeight);
    rect.graphics.endFill();

}

function toRad(a:Number):Number
{
    return a*Math.PI/180;
}

Вы можете поэкспериментировать с шириной и высотой окна градиента, пока не получите желаемый эффект. Надеюсь, это поможет!

...