Grafische gegevensklassen gebruikenFlash Player 10 of hoger, Adobe AIR 1.5 of hoger De verbeterde teken-API introduceert een verzameling klassen in het flash.display-pakket van het type IGraphicsData (een interface die door elk van de klassen wordt geïmplementeerd). De klassen die de IGraphicsData-interface implementeren, fungeren als gegevenscontainers voor de methoden van de API voor tekenen. De volgende klassen implementeren de IGraphicsData-interface:
Met deze klassen kunt u volledige tekeningen opslaan in een array met vectorobjecten van het type IGraphicsData (Vector.<IGraphicsData>) die opnieuw kan worden gebruikt als de gegevensbron voor andere vorminstanties of om tekeninformatie op te slaan voor gebruik in de toekomst. U ziet dat er meerdere vulklassen voor elke vulstijl zijn, maar slechts één streekklasse. ActionScript heeft maar één IGraphicsData-streekklasse omdat de streekklasse de vulklassen gebruikt om de stijl ervan te definiëren. Dat betekent dat elke streek in feite de streekklasse en een vulklasse is. De API's voor deze afbeeldingsgegevensklassen spiegelen overigens de methoden die ze in de klasse flash.display.Graphics vertegenwoordigen:
Daarnaast heeft de klasse GraphicsPath zijn eigen hulpprogrammamethoden GraphicsPath.moveTo(), GraphicsPath.lineTo(), GraphicsPath.curveTo(), GraphicsPath.wideLineTo() en GraphicsPath.wideMoveTo(), zodat deze opdrachten op eenvoudige wijze voor een GraphicsPath-instantie kunnen worden gedefinieerd. Deze hulpprogrammamethoden vereenvoudigen het rechtstreeks definiëren en bijwerken van de opdrachten en gegevenswaarden. Wanneer u een verzameling IGraphicsData-instanties hebt, gebruikt u de methode Graphics.drawGraphicsData() om de afbeeldingen te renderen. De methode Graphics.drawGraphicsData() voert een vector van IGraphicsData-instanties in sequentiële volgorde in de API voor tekenen uit: // 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); Door één waarde te wijzigen in het pad dat door de tekening in het voorbeeld wordt gebruikt, kan de vorm meerdere keren opnieuw worden getekend om een complexere afbeelding te verkrijgen: // 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); Ondanks het feit dat IGraphicsData-objecten vul- en streekstijlen kunnen definiëren, zijn de vul- en streekstijlen geen vereiste. Met andere woorden, methoden van de klasse Graphics kunnen worden gebruikt om stijlen in te stellen, terwijl IGraphicsData-objecten kunnen worden gebruikt om een opgeslagen verzameling paden te tekenen, of omgekeerd. Opmerking: Gebruik de methode Graphics.clear() om een vorige tekening te wissen voordat u een nieuwe maakt, tenzij u de oorspronkelijke tekening wilt uitbreiden, zoals in het voorbeeld hierboven. Terwijl u één gedeelte van een pad of verzameling van IGraphicsData-objecten wijzigt, kunt u de hele tekening opnieuw tekenen om de wijzigingen te zien.
Wanneer u grafische gegevensklassen gebruikt, wordt de vulling gerenderd wanneer drie of meer punten worden getekend, aangezien de vorm zich inherent op dat punt sluit. De vulling wordt gesloten, maar de streek niet. Dit gedrag is anders wanneer meerdere Graphics.lineTo()- of Graphics.moveTo()-opdrachten worden gebruikt. |
|