Smart Gradient API
Honestly flash’s default Gradient API is kind of crap. Therefore I made alternative methods that enables you define gradient easily. Instead of nasty gradient box matrix, my api use more human friendly parameter, Point and Number specified radius. So you can easily create gradient as if you use flash IDE.
//API for Linear Gradient Fill
beginLinearGradientFill([0x000000,0xfffffff],[1,1],[0,255], startPoint:Point, endPoint:Point);
//API for Radial Gradient Fill
beginRadialGradientFill([0x000000,0xffffff],[1.0,1.0],[0,255], centerPoint:Point, radius:Number);
Below is snipets.
public function beginRadialGradientFill( colors:Array,
alphas:Array,
ratios:Array,
centerPoint:Point,
radius:Number,
spreadMethod:String="pad",
interpolationMethod:String="rgb"):void{
var mat:Matrix = new Matrix();
mat.createGradientBox(radius*2,radius*2,0,centerPoint.x-radius,centerPoint.y-radius);
graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, mat, spreadMethod, interpolationMethod)
}
public function beginLinearGradientFill( colors:Array,
alphas:Array,
ratios:Array,
startPoint:Point,
endPoint:Point,
spreadMethod:String="pad",
interpolationMethod:String="rgb"):void{
var dx:Number = endPoint.x-startPoint.x;
var dy:Number = endPoint.y-startPoint.y;
var dist:Number = Math.sqrt(dx*dx+dy*dy);
var rad:Number = Math.atan2(dy,dx);
var offsetX:Number = -(dist - Math.cos(rad)*dist)*0.5 + startPoint.x;
var offsetY:Number = -(dist - Math.sin(rad)*dist)*0.5 + startPoint.y;
var mat:Matrix = new Matrix();
mat.createGradientBox(dist,dist,rad,offsetX,offsetY);
graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, mat, spreadMethod, interpolationMethod)
}
4 Comments
[...] なのでグラデーションを直感的に定義できるAPIを作って、JactionScriptersにアップしてみた。 このAPIを使うとGradientBoxの代わりに線形グラデーションなら始点と終点を、 放射状グラデーションなら中心点と半径を指定することでグラデーションを描画できる。 [...]
I experienced that the contiuous creation of Matrizes (Objects in general) is a big overhead for performance. I think if you want to publish it in a library it would be good for the performance if the Matrix was not instanciated every time but hold in a static constant and always repositioned.
Oh: and: great stuff: Thumbs Up!
Hi Martin
yes you are right.
If it is implemented as class, it would better to use static Point and Matrix instance instead of local variable.