Ritbanor

Flash Player 10 och senare, Adobe AIR 1.5 och senare

I avsnittet om att rita linjer och kurvor (se Rita linjer och kurvor) introduceras kommandon för att rita en enskild linje (Graphics.lineTo()) eller kurva (Graphics.curveTo()) och sedan flytta linjen till en annan punkt (Graphics.moveTo()) för att skapa en form. Vissa av förbättringarna i Drawing API i ActionScript, till exempel Graphics.drawPath() och Graphics.drawTriangles(), använder befintliga ritkommandon som parametrar. På det sättet kan du skapa en serie av Graphics.lineTo()-, Graphics.curveTo()- eller Graphics.moveTo()-kommandon för Flash-körningen och köra dem i en enda sats.

Två av förbättringarna i rit-API:t gör att Graphics.drawPath() och Graphics.drawTriangles() kan förena befintliga kommandon:

  • Uppräkningsklassen GraphicsPathCommand: Klassen GraphicsPathCommand associerar flera ritkommandon med konstanta värden. Du använder en serie med dessa värden som parametrar för metoden Graphics.drawPath(). Med ett enda kommando kan du sedan återge en hel form, eller flera former. Du kan också dynamiskt ändra värdena som skickas till dessa metoder om du vill ändra en befintlig form.

  • Vektorarrayer: Vektorarrayer innehåller en serie med värden av en viss datatyp. Du lagrar en serie med GraphicsPathCommand-konstanter i ett Vector-objekt och en serie med koordinater i ett annat Vector-objekt. Graphics.drawPath() eller Graphics.drawTriangles() tilldelar dessa värden tillsammans för att skapa en ritbana eller form.

Du behöver inte längre olika kommandon för varje segment i en form. Metoden Graphics.drawPath() konsoliderar till exempel Graphics.moveTo(), Graphics.lineTo() och Graphics.curveTo() till en enda metod. I stället för att varje metod anropas separat, avskiljs de till numeriska identifierare som definieras i klassen GraphicsPathCommand. En moveTo()-åtgärd betecknas med 1, medan en lineTo()-åtgärd är 2. Lagra en array med dessa värden i en Vector.<int>-objekt som kan användas i parametern commands. Skapa sedan en annan array som innehåller koordinater i en Vector.<Number>-objekt för parametern data. Varje GraphicsPathCommand-värde motsvarar de koordinatvärden som lagras i dataparametern där två siffror i följd definierar en plats i målkoordinatrymden.

Obs! Värdena i vektorn är inte Point-objekt. Vektorn är en serie siffror där varje grupp med två siffror representerar ett par med x/y-koordinater.

Metoden Graphics.drawPath() matchar varje kommando mot respektive punktvärde (en mängd med två eller flera siffror) för att skapa en bana i Graphics-objektet:

package{ 
import flash.display.*; 
 
public class DrawPathExample extends Sprite { 
    public function DrawPathExample(){ 
 
    var square_commands:Vector.<int> = new Vector.<int>(5,true); 
    square_commands[0] = 1;//moveTo 
    square_commands[1] = 2;//lineTo 
    square_commands[2] = 2; 
    square_commands[3] = 2; 
    square_commands[4] = 2; 
 
    var square_coord:Vector.<Number> = new Vector.<Number>(10,true); 
    square_coord[0] = 20; //x 
    square_coord[1] = 10; //y 
    square_coord[2] = 50; 
    square_coord[3] = 10; 
    square_coord[4] = 50; 
    square_coord[5] = 40; 
    square_coord[6] = 20; 
    square_coord[7] = 40; 
    square_coord[8] = 20; 
    square_coord[9] = 10; 
 
    graphics.beginFill(0x442266);//set the color 
    graphics.drawPath(square_commands, square_coord); 
    } 
} 
}

I exemplet ovan, tilldelas varje kommando och koordinatpar individuellt för att visa deras position i arrayen, men de kan tilldelas med ett enkelt uttryck. I exemplet nedan ritas samma stjärna genom att värden tilldelas för varje array i ett enkelt push()-uttryck:

package{ 
import flash.display.*; 
 
public class DrawPathExample extends Sprite { 
    public function DrawPathExample(){ 
 
    var square_commands:Vector.<int> = new Vector.<int>(); 
    square_commands.push(1, 2, 2, 2, 2); 
    var square_coord:Vector.<Number> = new Vector.<Number>(); 
    square_coord.push(20,10, 50,10, 50,40, 20,40, 20,10); 
 
    graphics.beginFill(0x442266); 
    graphics.drawPath(square_commands, square_coord); 
    } 
} 
}