Caminhos de desenho

Flash Player 10 e posterior, Adobe AIR 1.5 e posterior

A seção sobre como desenhar linhas e curvas (consulte Desenho de linhas e curvas) apresentou os comandos usados para desenhar uma única linha (Graphics.lineTo()) ou curva (Graphics.curveTo()) e mover a linha até outro ponto (Graphics.moveTo()) para obter uma forma. Algumas das melhorias da API de desenho do ActionScript, como Graphics.drawPath() e Graphics.drawTriangles(), utilizam os comandos de desenho existentes como parâmetros. Assim, você pode fornecer uma série de comandos Graphics.lineTo(), Graphics.curveTo() ou Graphics.moveTo() para o tempo de execução do Flash executar em uma única instrução.

Dois dos aprimoramentos em APIs de desenho permitem que Graphics.drawPath() e Graphics.drawTriangles() consolidem comandos existentes:

  • A classe de enumeração GraphicsPathCommand: a classe GraphicsPathCommand associa vários comandos de desenho a valores de constante. Use uma série desses valores como parâmetros para o método Graphics.drawPath(). Em seguida, com um único comando, você pode renderizar a forma inteira ou várias formas. Também é possível alterar dinamicamente os valores passados para esses métodos a fim de alterar uma forma existente.

  • Matrizes de vetor: as matrizes de vetor contêm uma série de valores de um tipo de dados específico. Assim, você pode armazenar um grupo de constantes GraphicsPathCommand em um objeto Vector e uma série de coordenadas em outro objeto Vector. Graphics.drawPath() ou Graphics.drawTriangles() atribui esses valores juntos para gerar um caminho de desenho ou uma forma.

Não é mais preciso separar comandos para cada segmento de uma forma. Por exemplo, o método Graphics.drawPath() consolida Graphics.moveTo(), Graphics.lineTo() e Graphics.curveTo() em um único método. Em vez de cada método ser chamado separadamente, eles são abstraídos em identificadores numéricos, conforme definido na classe GraphicsPathCommand. Uma operação moveTo() é representada por um 1, enquanto uma operação lineTo() é um 2. Armazene uma matriz desses valores em um objeto Vector.<int> para uso no parâmetro commands. Em seguida, crie outra matriz que contenha coordenadas em um objeto Vector.<Number> para o parâmetro data. Cada valor GraphicsPathCommand corresponde aos valores de coordenada armazenados no parâmetro de dados em que dois números consecutivos definem um local no espaço de coordenadas de destino.

Nota: Os valores do vetor não são objetos Point; o vetor consiste em uma série de números em que cada grupo de dois números representa um par de coordenadas x/y.

O método Graphics.drawPath() compara cada comando com seus respectivos valores de ponto (uma coleção de dois ou quatro números) para gerar um caminho no 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); 
    } 
} 
}

No exemplo acima, cada comando e par de coordenadas são designados individualmente para mostrar sua posição na matriz, mas podem ser atribuídos em uma única instrução. O exemplo a seguir desenha a mesma estrela designando os valores para cada matriz em uma instrução 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); 
    } 
} 
}