这是我在这里发表的第一篇文章,所以我希望我能把一切都弄好 - 并找到问题的答案。
在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;
}
答案 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;
}
您可以使用渐变框的宽度和高度,直到获得所需的效果。希望这有帮助!