Använda grafiska dataklasser

Flash Player 10 och senare, Adobe AIR 1.5 och senare

Det förbättrade rit-API:t inkluderar en uppsättning klasser i flash.display-paketet som implementerar gränssnittet IGraphicsData . De här klasserna fungerar som värdeobjekt (databehållare) som representerar rit-API:ts ritmetoder.

Med de här klasserna kan du lagra en fullständig ritning i ett Vector-objekt av IGraphicsData-typ (Vector.<IGraphicsData>). Du kan sedan återanvända dessa grafikdata som datakälla för andra forminstanser eller för att lagra ritinformation för framtida bruk.

Observera att det finns flera fyllningsklasser för varje fyllningsformat, men bara en linjeklass. ActionScript innehåller bara en IGraphicsData-linjeklass eftersom linjeklasser använder fyllningsklasserna när formatet definieras. Varje linje definieras i själva verket av en kombination av klassen Stroke och en fyllningsklass. API:et för dessa grafiska dataklasser avspeglar annars metoderna som de representerar i klassen flash.display.Graphics:

Graphics-metod

Motsvarande klass

beginBitmapFill()

GraphicsBitmapFill

beginFill()

GraphicsSolidFill

beginGradientFill()

GraphicsGradientFill

beginShaderFill()

GraphicsShaderFill

lineBitmapStyle()

GraphicsStroke + GraphicsBitmapFill

lineGradientStyle()

GraphicsStroke + GraphicsGradientFill

lineShaderStyle()

GraphicsStroke + GraphicsShaderFill

lineStyle()

GraphicsStroke + GraphicsSolidFill

moveTo()

lineTo()

curveTo()

drawPath()

GraphicsPath

drawTriangles()

GraphicsTrianglePath

Dessutom har klassen GraphicsPath egna GraphicsPath.moveTo() -, GraphicsPath.lineTo() -, GraphicsPath.curveTo() -, GraphicsPath.wideLineTo() - och GraphicsPath.wideMoveTo() -verktygsmetoder så att dessa kommandon enkelt kan definieras för en GraphicsPath-instans. Dessa verktygsmetoder gör det enklare att definiera och uppdatera kommandona och datavärdena direkt.

Rita med vektorgrafikdata

När du har en samling IGraphicsData-instanser använder du Graphics-klassens drawGraphicsData() -metod för att återge grafiken. Metoden drawGraphicsData() utför en rad ritinstruktioner från en vektor med IGraphicsData-instanser i ordningsföljd:

// 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(GraphicsPathCommand.MOVE_TO, GraphicsPathCommand.LINE_TO, GraphicsPathCommand.LINE_TO); 
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);

Genom att ändra ett värde i banan som används av teckningen i exemplet, kan du rita om formen flera gånger och få en mer komplex bild:

// 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-objekt kan definiera fyllnings- och linjeformat, men fyllnings- och linjeformat är inget krav. Graphics-klassmetoder kan med andra ord användas för att ställa in format medan IGraphicsData-objekt kan användas för att rita en sparad mängd med banor, och tvärtom.

Obs! Använd metoden Graphics.clear() om du vill ta bort en tidigare teckning innan du påbörjar en ny, såvida du inte lägger till något i den ursprungliga teckningen som i exemplet ovan. När du ändrar en enskild del av en bana eller mängd med IGraphicsData-objekt, måste du rita om hela teckningen för att kunna se ändringarna.

När du använder grafikdataklasser återges fyllningen när tre eller fler punkter ritas, eftersom formen är stängd vid den punkten. Även om fyllningen stängs gör inte linjen det, och dess beteende är ett annat än när du använder flera Graphics.lineTo() - eller Graphics.moveTo() -kommandon.

Läsa vektorgrafikdata

I Flash Player 11.6 samt Adobe AIR 3.6 och senare versioner kan du, utöver att rita vektorinnehåll till ett visningsobjekt, använda Graphics-klassens readGraphicsData( )-metod för att hämta en datarepresentation av ett visningsobjekts vektorgrafikinnehåll. Detta är praktiskt när du vill skapa en ögonblicksbild av en bild som du till exempel vill spara, kopiera eller skapa en Sprite-mall för.

När readGraphicsData() -metoden anropas returneras en Vector-instans med IGraphicsData-objekt. Detta är samma objekt som används för att rita vektorgrafik med metoden drawGraphicsData() .

Det finns ett antal begräsningar när det gäller att läsa vektorgrafik med metoden readGraphicsData() . Mer information om detta finns i avsnittet om readGraphicsData() i referenshandboken för ActionScript .