我正在尝试渲染一个带有径向渐变的圆,但我似乎无法弄明白。
var bkgdGrad:Shape = new Shape();
bkgdGrad.graphics.beginGradientFill(GradientType.RADIAL, [0x0000FF, 0x00FF00], [1, 1], [0, 255],null,"pad");
bkgdGrad.graphics.drawCircle(0,0,r+200);
bkgdGrad.graphics.endFill();
this.addChild(bkgdGrad);
上面的代码为我呈现了一个坚实的绿色圆圈。如果我将颜色后的数组更改为[1,0](alpha数组),我会得到透明填充。我似乎无法通过flash绘制径向渐变,上面的工作对GradientType.LINEAR没有问题
答案 0 :(得分:2)
试试这个,这可能会对你有所帮助:
package
{
import flash.display.Sprite;
import flash.display.GradientType;
import flash.geom.Matrix;
public class RadialGradient extends Sprite
{
private var gType:String;
private var matrix:Matrix;
private var bound:Sprite;
public function RadialGradient()
{
var gType:String = GradientType.RADIAL;
var matrix:Matrix = new Matrix();
matrix.createGradientBox(550,400,0,0,0);
var gColors:Array = [0x0000FF, 0x00FF00];
var gAlphas:Array = [1,1];
var gRatio:Array = [0,255];
var bound:Sprite = new Sprite();
bound.graphics.beginGradientFill(gType,gColors,gAlphas,gRatio,matrix);
bound.graphics.drawCircle(0,0,r+200);
bound.x = bound.y = 0;
addChild(bound);
}
}
}
答案 1 :(得分:2)
您需要一个Matrix
对象及其createGradientBox()
方法。
我创建了一个名为RadialGraident
的类,它创建了一个带有径向渐变的圆的Shape
对象。您需要做的就是在创建对象时解析半径,颜色,alpha和比率,如下例所示:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var radialGradient:RadialGradient = new RadialGradient(200, [0x0000FF, 0x00FF00], [1, 1], [0, 255]);
addChild(radialGradient);
}// end function
}// end class
}// end package
import flash.display.GradientType;
import flash.display.Shape;
import flash.geom.Matrix;
internal class RadialGradient extends Shape
{
public function RadialGradient(radius:Number, colors:Array, alphas:Array, ratios:Array)
{
var matrix:Matrix = new Matrix();
matrix.createGradientBox(radius * 2, radius * 2);
graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix);
graphics.drawCircle(radius, radius, radius);
graphics.endFill();
}// end function
}// end class
答案 2 :(得分:1)
使用新的Matrix对象创建一个渐变框,并将新的矩阵对象分配给beginGradientFill matrix
参数:
flash.geom.Matrix.createGradientBox()
[编辑] :这是一个简单的在线教程,可以帮助解释更多: