Disegno di tracciati

Flash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive

La sezione sul disegno di linee e curve (vedete Disegno di linee e curve) introduce i comandi per il disegno di una linea (Graphics.lineTo()) o curva (Graphics.curveTo()) singola e quindi per lo spostamento della linea in un altro punto (Graphics.moveTo()) per creare una forma. Alcuni dei miglioramenti dell'API di disegno di ActionScript, ad esempio Graphics.drawPath() e Graphics.drawTriangles(), utilizzano i comandi di disegno esistenti come parametri. Pertanto, potete fornire una serie di comandi Graphics.lineTo(), Graphics.curveTo() o Graphics.moveTo() per il runtime di Flash da eseguire in una singola istruzione.

Due miglioramenti dell'API di disegno consentono a Graphics.drawPath() e Graphics.drawTriangles() di consolidare i comandi esistenti:

  • Classe di enumerazione GraphicsPathCommand: la classe GraphicsPathCommand consente di associare diversi comandi di disegno a valori costanti. Potete utilizzare una serie di questi valori come parametri del metodo Graphics.drawPath(). Quindi con un singolo comando, potete eseguire il rendering di un'intera forma o di diverse forme. Potete anche alterare dinamicamente i valori passati a questi metodi per modificare una forma esistente.

  • Array vettoriali: gli array vettoriali contengono una serie di valori di un tipo di dati specifico. Pertanto, potete memorizzare una serie di costanti GraphicsPathCommand in un oggetto Vector e una serie di coordinate in un altro oggetto Vector. Graphics.drawPath() o Graphics.drawTriangles() assegnano questi valori insieme per generare un tracciato di disegno o una forma.

Non sono più necessari comandi separati per ciascun segmento di una forma. Ad esempio, il metodo Graphics.drawPath() consente di consolidare Graphics.moveTo(), Graphics.lineTo() e Graphics.curveTo() in un singolo metodo. I metodi vengono astratti in identificatori numerici, come definito nella classe GraphicsPathCommand, anziché essere chiamati separatamente. Un'operazione moveTo() è segnalata da un 1, mentre un'operazione lineTo() è segnalata da un 2. Memorizzate un array di questi valori in un oggetto Vector.<int> per l'uso nel parametro commands. Quindi, create un altro array contenente coordinate in un oggetto Vector.<Number> per il parametro data. Ogni valore GraphicsPathCommand corrisponde ai valori in pixel delle coordinate memorizzate nel parametro data, in cui due numeri consecutivi definiscono una posizione nello spazio delle coordinate di destinazione.

Nota: i valori nel vettore non sono oggetti Point; il vettore è una serie di numeri in cui ogni gruppo di due numeri rappresenta una coppia di coordinate x/y.

Il metodo Graphics.drawPath() associa ciascun comando ai rispettivi valori in punto (una raccolta di due o quattro numeri) per generare un tracciato nell'oggetto Graphics:

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); 
    } 
} 
}

Nell'esempio precedente, ciascuna coppia comando/coordinata viene assegnata individualmente per mostrarne la posizione nell'array, ma è possibile effettuare l'assegnazione in un'unica istruzione. L'esempio seguente disegna la stessa stella assegnando i valori di ciascun array in una singola istruzione push():

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); 
    } 
} 
}