Verwenden von Graphics-DatenklassenFlash Player 10 und höher, Adobe AIR 1.5 und höher Die erweiterte Zeichnungs-API führt im flash.display-Paket eine neue Gruppe von Klassen des Typs IGraphicsData ein (eine Schnittstelle, die jede der Klassen implementiert). Die Klassen, die die IGraphicsData-Schnittstelle implementieren, dienen als Datenbehälter für die Methoden der Zeichnungs-API. Die folgenden Klassen implementieren die IGraphicsData-Schnittstelle:
Mit diesen Klassen können Sie vollständige Zeichnungen in einem Vektorobjekt-Array des Typs IGraphicsData speichern, die als Datenquelle für andere Formen oder zum Speichern von Zeicheninformationen zur späteren Verwendung genutzt werden können. Beachten Sie, dass es für jeden Füllstil mehrere Füllklassen gibt, aber nur eine Strichklasse. ActionScript verfügt nur über eine IGraphicsData-Strichklassen, dass die Strichklasse die Füllklassen zur Definition des Stils verwendet. Somit besteht jeder Strich aus der Strichklasse und einer Füllklasse. Die APIs für diese Graphics-Datenklassen spiegeln die Methoden, die sie repräsentieren, in der flash.display.Graphics-Klasse:
Zusätzlich verfügt die GraphicsPath-Klasse über eigene Methoden GraphicsPath.moveTo(), GraphicsPath.lineTo(), GraphicsPath.curveTo(), GraphicsPath.wideLineTo() und GraphicsPath.wideMoveTo(), um diese Befehle einfach für eine GraphicsPath-Instanz zu definieren. Diese Dienstprogrammmethoden definieren oder aktualisieren die Befehle und Datenwerte direkt. Nachdem Sie über eine Reihe von IGraphicsData-Instanzen verfügen, verwenden Sie Graphics.drawGraphicsData()-Methoden, um die Grafiken darzustellen. Die Graphics.drawGraphicsData()-Methode lässt einen Vektor von IGraphicsData-Instanzen in der Reihenfolge durch die Zeichnungs-API laufen: // stroke object var stroke:GraphicsStroke = new GraphicsStroke(3); stroke.joints = JointStyle.MITER; stroke.fill = new GraphicsSolidFill(0x102020);// solid stroke // fill object var fill:GraphicsGradientFill = new GraphicsGradientFill(); fill.colors = [0x0000FF, 0xEEFFEE]; fill.matrix = new Matrix(); fill.matrix.createGradientBox(70,70, Math.PI/2); // path object var path:GraphicsPath = new GraphicsPath(new Vector.<int>(), new Vector.<Number>()); path.commands.push(1,2,2); path.data.push(125,0, 50,100, 175,0); // combine objects for complete drawing var drawing:Vector.<IGraphicsData> = new Vector.<IGraphicsData>(); drawing.push(stroke, fill, path); // draw the drawing graphics.drawGraphicsData(drawing); Indem Sie einen Wert im Pfad, der von der Zeichnung verwendet wird, ändern, kann die Form mehrere Male neu gezeichnet werden, um ein komplexeres Bild zu erstellen: // draw the drawing multiple times // change one value to modify each variation graphics.drawGraphicsData(drawing); path.data[2] += 200; graphics.drawGraphicsData(drawing); path.data[2] -= 150; graphics.drawGraphicsData(drawing); path.data[2] += 100; graphics.drawGraphicsData(drawing); path.data[2] -= 50;graphicsS.drawGraphicsData(drawing); IGraphicsData-Objekte können zwar Füll- und Strichstile definieren, diese Stile sind jedoch nicht unbedingt erforderlich. Anders ausgedrückt lassen sich Methoden der Graphics-Klasse verwenden, um Stile festzulegen, während IGraphicsData-Objekte verwendet werden, um eine gespeicherte Sammlung von Pfaden zu zeichnen oder umgekehrt. Hinweis: Verwenden Sie die Graphics.clear()-Methode, um eine vorherige Zeichnung zu löschen, bevor eine neue begonnen wird, es sei denn, Sie fügen der Originalzeichnung etwas hinzu wie im Beispiel oben. Wenn Sie einen Teil eines Pfades oder einer Sammlung von IGraphicsData-Objekten ändern, zeichnen Sie die gesamte Zeichnung neu, um die Änderungen zu sehen.
Wenn Sie Graphics-Datenklassen verwenden, wird die Füllung dargestellt, wenn drei oder mehr Punkte gezeichnet werden, da die Form an diesem Punkt inherent geschlossen ist. Auch wenn die Füllung geschlossen wird, wird es der Strich nicht. Dieses Verhalten unterscheidet sich von der Verwendung der Befehle Graphics.lineTo() oder Graphics.moveTo(). |
|