Trazados de dibujo

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

La sección sobre dibujo de líneas y curvas (consulte Dibujo de líneas y curvas) introdujo los comandos para dibujar una sola línea (Graphics.lineTo()) o curva (Graphics.curveTo()) y posteriormente mover la línea a otro punto (Graphics.moveTo()) para realizar una forma. Algunas de las mejoras de la API de dibujo de ActionScript, como Graphics.drawPath() y Graphics.drawTriangles(), utilizan los comandos de dibujo existentes como parámetros. Por lo tanto, se pueden proporcionar una serie de comandos Graphics.lineTo(), Graphics.curveTo() o Graphics.moveTo() para el motor de ejecución de Flash para que se ejecuten en una sola sentencia.

Dos de las mejoras de la API de dibujo permiten que Graphics.drawPath() y Graphics.drawTriangles() consoliden comandos existentes:

  • Clase de enumeración GraphicsPathCommand: la clase GraphicsPathCommand asocia varios comandos de dibujo con valores constantes. Se usa una serie de estos valores como parámetros para el método Graphics.drawPath(). Posteriormente con un solo comando puede representar una forma completa o varias formas. También puede modificar dinámicamente los valores transmitidos a estos métodos para modificar una forma existente.

  • Conjuntos vectoriales: contiene una serie de valores de un tipo de datos específico. Por lo tanto, se almacena una serie de constantes GraphicsPathCommand en un objeto Vector y varias coordenadas en otro objeto Vector. Graphics.drawPath() o Graphics.drawTriangles() asigna estos valores de forma conjunta para generar un trazado de dibujo o forma.

Ya no es necesario separar comandos para cada segmento de una forma. Por ejemplo, el método Graphics.drawPath() consolida Graphics.moveTo(), Graphics.lineTo() y Graphics.curveTo() en un solo método. En lugar de que los métodos se llamen por separado, se abstraen en identificadores numéricos, tal y como se define en la clase GraphicsPathCommand. Una operación moveTo() se expresa mediante un 1, mientras que la operación lineTo() es un 2. Almacene un conjunto de estos valores en un objeto Vector.<int> object para su uso en el parámetro commands. A continuación, cree otro conjunto que contenga coordenadas en un objeto Vector.<Number> para el parámetro data. Cada valor GraphicsPathCommand se corresponde con los valores de coordenadas almacenados en el parámetro de datos donde dos números consecutivos definen una ubicación en el espacio de coordenadas de destino.

Nota: los valores en el vector no son objetos Point; el vector es una serie de números donde cada grupo de dos números representa un par de coordenadas x/y.

El método Graphics.drawPath() hace coincidir cada comando con sus respectivos valores de coma (un conjunto de dos o cuatro números) para generar un trazado en el objeto 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); 
    } 
} 
}

En el ejemplo anterior, cada comando y par de coordenadas se asignan individualmente para mostrar su posición en el conjunto, pero se pueden asignar en una sola sentencia. En el siguiente ejemplo se dibuja la misma estrella asignando los valores para cada conjunto en una sola sentencia 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); 
    } 
} 
}