Flash AS3线性渐变旋转问题

时间:2011-10-27 09:43:46

标签: flash actionscript-3 linear-gradients gradients

这是我在这里发表的第一篇文章,所以我希望我能把一切都弄好 - 并找到问题的答案。

在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 :(得分:0)

你的问题在这一行:

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;
}

您可以使用渐变框的宽度和高度,直到获得所需的效果。希望这有帮助!