Ваша проблема в этой строке:
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;
}
Вы можете поэкспериментировать с шириной и высотой окна градиента, пока не получите желаемый эффект. Надеюсь, это поможет!