Erstellen von Farbverlaufslinien und -füllungen

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Mit dem Graphics-Objekt können zudem Striche und Füllungen mit Farbverläufen anstelle von Volltonfarben gezeichnet werden. Ein Farbverlaufsstrich wird mit der lineGradientStyle() -Methode erstellt und eine Farbverlaufsfüllung mit der beginGradientFill() -Methode.

Bei beiden Methoden werden dieselben Parameter angegeben. Die ersten vier sind erforderlich: Typ, Farben, Alphawerte und Verhältnisse. Die übrigen vier Parameter sind optional, jedoch nützlich zur erweiterten Anpassung.

  • Mit dem ersten Parameter wird der Typ des zu erstellenden Farbverlaufs angegeben. Zulässige Werte sind GradientType.LINEAR oder GradientType.RADIAL .

  • Mit dem zweiten Parameter wird das Array der zu verwendenden Farben angegeben. Bei einem linearen Farbverlauf sind die Farben von links nach rechts angeordnet. Bei einem radialen Farbverlauf sind die Farben von innen nach außen angeordnet. Die Anordnung der Farben im Array stellt die Reihenfolge dar, in der die Farben im Farbverlauf angezeigt werden.

  • Mit dem dritten Parameter werden die Werte der Alphatransparenz der entsprechenden Farben im vorherigen Parameter angegeben.

  • Mit dem vierten Parameter werden die Verhältnisse bzw. die Gewichtung der einzelnen Farben im Farbverlauf festgelegt. Dabei können Werte in einem Bereich zwischen 0 und 255 angegeben werden. Diese Werte stellen keine Breite oder Höhe dar, sondern die Position im Farbverlauf. Mit 0 wird der Beginn des Farbverlaufs und mit 255 das Ende des Farbverlaufs angegeben. Das Array der Verhältnisse muss sequenziell ansteigen und über die gleiche Anzahl Einträge wie in den Arrays der Farben und Alphawerte verfügen, die im zweiten und dritten Parameter angegeben sind.

Obwohl es sich beim fünften Parameter für die Transformationsmatrix um einen optionalen Parameter handelt, wird dieser Parameter in der Regel verwendet, da so die Darstellung des Farbverlaufs einfach und effizient gesteuert werden kann. Für diesen Parameter kann eine Matrix-Instanz angegeben werden. Die einfachste Möglichkeit, ein Matrix-Objekt für einen Farbverlauf zu erstellen, besteht darin, die createGradientBox() -Methode der Matrix-Klasse zu verwenden.

Definieren eines Matrix-Objekts für einen Farbverlauf

Mithilfe der Methoden beginGradientFill() und lineGradientStyle() der flash.display.Graphics-Klasse können Sie den Farbverlauf in Formen definieren. Beim Definieren eines Farbverlaufs geben Sie eine Matrix als einen der Parameter dieser Methoden an.

Die Matrix kann am einfachsten mithilfe der createGradientBox() -Methode der Matrix-Klasse definiert werden, bei der eine Matrix zum Definieren des Farbverlaufs festgelegt wird. Sie legen die Skalierung, Drehung und Position des Farbverlaufs mit den Parametern fest, die an die createGradientBox() -Methode übergeben werden. Bei der createGradientBox() -Methode können folgende Parameter angegeben werden:

  • Breite des Farbverlaufsfelds: die Breite (in Pixel), auf die sich der Farbverlauf ausdehnt

  • Höhe des Farbverlaufsfelds: die Höhe (in Pixel), auf die sich der Farbverlauf ausdehnt

  • Drehung des Farbverlaufsfelds: die Drehung (in Bogenmaß) des Farbverlaufs

  • Horizontale Versetzung: horizontale Versetzung (in Pixel) des Farbverlaufs

  • Vertikale Versetzung: vertikale Versetzung (in Pixel) des Farbverlaufs

Dies wird an einem Beispiel für einen Farbverlauf mit den folgenden Merkmalen verdeutlicht:

  • GradientType.LINEAR

  • Zwei Farben, Grün und Blau, bei denen das ratios -Array auf [0, 255] gesetzt ist.

  • SpreadMethod.PAD

  • InterpolationMethod.LINEAR_RGB

In den folgenden Beispielen sind Farbverläufe abgebildet, bei denen der rotation -Parameter der createGradientBox() -Methode wie angegeben abweicht, alle anderen Einstellungen jedoch unverändert bleiben:

width = 100;

height = 100;

rotation = 0;

tx = 0;

ty = 0;

width = 100;

height = 100;

rotation = Math.PI/4; // 45°

tx = 0;

ty = 0;

width = 100;

height = 100;

rotation = Math.PI/2; // 90°

tx = 0;

ty = 0;

In den folgenden Beispielen sind die Effekte in einem linearen Grün-Blau-Farbverlauf abgebildet, bei dem die Parameter rotation , tx und ty der createGradientBox() -Methode wie angegeben abweichen, alle anderen Einstellungen jedoch unverändert bleiben:

width = 50;

height = 100;

rotation = 0;

tx = 0;

ty = 0;

width = 50;

height = 100;

rotation = 0

tx = 50;

ty = 0;

width = 100;

height = 50;

rotation = Math.PI/2; // 90°

tx = 0;

ty = 0;

width = 100;

height = 50;

rotation = Math.PI/2; // 90°

tx = 0;

ty = 50;

Die Parameter width , height , tx und ty der createGradientBox() -Methode wirken sich auch auf die Größe und die Position der radialen Farbverlaufsfüllung aus, wie im folgenden Beispiel abgebildet:

width = 50;

height = 100;

rotation = 0;

tx = 25;

ty = 0;

Der zuletzt abgebildete radiale Farbverlauf wird mit folgendem Code erstellt:

import flash.display.Shape; 
import flash.display.GradientType; 
import flash.geom.Matrix; 
 
var type:String = GradientType.RADIAL; 
var colors:Array = [0x00FF00, 0x000088]; 
var alphas:Array = [1, 1]; 
var ratios:Array = [0, 255]; 
var spreadMethod:String = SpreadMethod.PAD; 
var interp:String = InterpolationMethod.LINEAR_RGB; 
var focalPtRatio:Number = 0; 
 
var matrix:Matrix = new Matrix(); 
var boxWidth:Number = 50; 
var boxHeight:Number = 100; 
var boxRotation:Number = Math.PI/2; // 90° 
var tx:Number = 25; 
var ty:Number = 0; 
matrix.createGradientBox(boxWidth, boxHeight, boxRotation, tx, ty); 
 
var square:Shape = new Shape; 
square.graphics.beginGradientFill(type,  
                            colors, 
                            alphas, 
                            ratios,  
                            matrix,  
                            spreadMethod,  
                            interp,  
                            focalPtRatio); 
square.graphics.drawRect(0, 0, 100, 100); 
addChild(square);

Beachten Sie, dass die Breite und die Höhe der Farbverlaufsfüllung durch die Breite und die Höhe der Farbverlaufsmatrix und nicht durch die mit dem Graphics-Objekt gezeichnete Breite und Höhe festgelegt werden. Beim Zeichnen mithilfe des Graphics-Objekts wird eine Zeichnung an den entsprechenden Koordinaten in der Farbverlaufsmatrix erstellt. Auch wenn Sie eine der Shape-Methoden eines Graphics-Objekts (z. B. drawRect() verwenden, dehnt sich der Farbverlauf nicht automatisch auf die gezeichnete Form aus. Die Größe des Farbverlaufsfelds muss stattdessen in der Farbverlaufsmatrix angegeben werden.

Das folgende Codebeispiel veranschaulicht den visuellen Unterschied zwischen den Abmessungen der Farbverlaufsmatrix und den Zeichnungsabmessungen:

var myShape:Shape = new Shape(); 
var gradientBoxMatrix:Matrix = new Matrix(); 
gradientBoxMatrix.createGradientBox(100, 40, 0, 0, 0); 
myShape.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x00FF00, 0x0000FF], [1, 1, 1], [0, 128, 255], gradientBoxMatrix); 
myShape.graphics.drawRect(0, 0, 50, 40); 
myShape.graphics.drawRect(0, 50, 100, 40); 
myShape.graphics.drawRect(0, 100, 150, 40); 
myShape.graphics.endFill(); 
this.addChild(myShape);

Mit diesem Code werden drei Farbverläufe mit dem gleichen Füllstil gezeichnet, der als gleichmäßige Verteilung auf die Farben Rot, Grün und Blau angegeben ist. Die Farbverläufe werden mit der drawRect() -Methode mit einer Breite von jeweils 50, 100 und 150 Pixel erstellt. Die Farbverlaufsmatrix, die in der beginGradientFill() -Methode angegeben ist, wird mit einer Breite von 100 Pixel erstellt. Dies bedeutet, dass der erste Farbverlauf nur die Hälfte des Farbverlaufsspektrums umfasst. Der zweite Farbverlauf umfasst das gesamte Spektrum. Der dritte Farbverlauf umfasst das gesamte Spektrum und weist eine zusätzliche Ausdehnung der Farbe Blau um 50 Pixel nach rechts auf.

Die lineGradientStyle() -Methode entspricht der beginGradientFill() -Methode, mit der Ausnahme, dass Sie neben der Festlegung des Farbverlaufs vor dem Zeichnen auch die Strichstärke mit der lineStyle() -Methode angeben müssen. Mit dem folgenden Code wird ein Feld mit einem Rot-Grün-Blau-Farbverlaufsstrich erstellt:

var myShape:Shape = new Shape(); 
var gradientBoxMatrix:Matrix = new Matrix(); 
gradientBoxMatrix.createGradientBox(200, 40, 0, 0, 0); 
myShape.graphics.lineStyle(5, 0); 
myShape.graphics.lineGradientStyle(GradientType.LINEAR, [0xFF0000, 0x00FF00, 0x0000FF], [1, 1, 1], [0, 128, 255], gradientBoxMatrix); 
myShape.graphics.drawRect(0, 0, 200, 40); 
this.addChild(myShape);

Weitere Informationen zur Matrix-Klasse finden Sie unter Verwenden von Matrix-Objekten .