Actionscript 3 我试图让actionscript3中的4个GradientFills使用相同的代码,但其中两个可以工作,另外两个不';T

Actionscript 3 我试图让actionscript3中的4个GradientFills使用相同的代码,但其中两个可以工作,另外两个不';T,actionscript-3,Actionscript 3,我试图画四个形状,并用渐变填充填充,但只有两个像我预期的那样显示,其他两个不起作用。问题是,我对四个渐变填充使用完全相同的代码 import flash.display.Sprite; import flash.geom.Matrix; import flash.display.GradientType; drawBackground(); function drawBackground():void{ var ground:Sprite = new Sprite(); addChild

我试图画四个形状,并用渐变填充填充,但只有两个像我预期的那样显示,其他两个不起作用。问题是,我对四个渐变填充使用完全相同的代码

import flash.display.Sprite;
import flash.geom.Matrix;
import flash.display.GradientType;  

drawBackground();

function drawBackground():void{
var ground:Sprite = new Sprite();
addChild(ground);
ground.graphics.lineStyle(2,0x999999);
ground.graphics.beginFill(0xE6E6E6, 0.5);
ground.graphics.drawRect(0,0,640,610);
ground.graphics.endFill();
ground.x = 30;
ground.y = 60;

var mat:Matrix;  
var color:Array;
var alphas:Array;
var ratio:Array;

mat=new Matrix(); 
color=[0xD5D5D5,0x999999];
alphas=[0.5, 0.8];
ratio=[0,255];

var topwall:Sprite=new Sprite();
mat.createGradientBox(700,60,Math.PI/2);
topwall.graphics.lineStyle(2,0x999999);
topwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
topwall.graphics.moveTo(0, 0);
topwall.graphics.lineTo(700, 0);
topwall.graphics.lineTo(670, 60);
topwall.graphics.lineTo(30,60);
this.addChild(topwall);

var leftwall:Sprite=new Sprite();
mat.createGradientBox(30,700,0);
leftwall.graphics.lineStyle(2,0x999999);
leftwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
leftwall.graphics.moveTo(0, 0);
leftwall.graphics.lineTo(0,700);
leftwall.graphics.lineTo(30, 670);
leftwall.graphics.lineTo(30,60);
this.addChild(leftwall);

var bottomwall:Sprite=new Sprite();
mat.createGradientBox(700,700,-Math.PI/2);
bottomwall.graphics.lineStyle(2,0x999999);
bottomwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
bottomwall.graphics.moveTo(30, 670);
bottomwall.graphics.lineTo(670,670);
bottomwall.graphics.lineTo(700, 700);
bottomwall.graphics.lineTo(0,700);
this.addChild(bottomwall);

var rightwall:Sprite=new Sprite();
mat.createGradientBox(30,700,0);
rightwall.graphics.lineStyle(2,0x999999);
rightwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
rightwall.graphics.moveTo(670, 60);
rightwall.graphics.lineTo(670,670);
rightwall.graphics.lineTo(700, 700);
rightwall.graphics.lineTo(700,0);
this.addChild(rightwall);
}

目前,topwall和leftwall表现正常,但其余两个填充了单一颜色。谁都知道为什么

创建GradientBox需要一些调整:

var bottomwall:Sprite=new Sprite();
mat.createGradientBox(700,30,-Math.PI/2, 0, 670);
bottomwall.graphics.lineStyle(2,0x999999);
bottomwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
bottomwall.graphics.moveTo(30, 670);
bottomwall.graphics.lineTo(670,670);
bottomwall.graphics.lineTo(700, 700);
bottomwall.graphics.lineTo(0,700);
this.addChild(bottomwall);

var rightwall:Sprite=new Sprite();
mat.createGradientBox(30,700,Math.PI, 670, 0);
rightwall.graphics.lineStyle(2,0x999999);
rightwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
rightwall.graphics.moveTo(670, 60);
rightwall.graphics.lineTo(670,670);
rightwall.graphics.lineTo(700, 700);
rightwall.graphics.lineTo(700,0);
this.addChild(rightwall);

非常感谢!它现在可以工作了,但是,我仍然不确定为什么我必须在这里指定tx和ty值。我在编写topwall和leftwall时将它们留空,它们工作正常。这是因为您不是从位置0,0绘制的-默认情况下,渐变从0,0点开始,因此需要将其转换为(例如)670,0.0。再次感谢你,李。