Curso AS3

Flash CS4, Classe drawTriangles

A API para desenhos ganhou diversos novos métodos, um deles é o drawTriangles(), ao ler o nome do método é comum deduzir que é mais um método simples como o drawCircle(), onde este novo método seria um simples meio de desenhar um triângulo, ele desenha sim triângulos, mas vai muito além disto, tendo uma pequena noção de 3D é visto que formas são compostas por vertices, o drawTriangles pode ser trabalhado para esta finalidade.

O método drawTriangles desenha através de vetores, o Flash Player 10 ganhou diversos tipos de vetores para melhorar a performance.

O primeiro parâmetro do drawTriangles deve ser um Vector do tipo Number contendo as vértices, este vetor deve possuir pelo menos 6 valores, um triângulo possui três pontos, cada ponto possui um X / Y, ou seja, 6 valores.

This movie requires Flash Player 8.

var mc:Shape = new Shape();
mc.graphics.beginFill(0xFF0000);
mc.graphics.drawTriangles(Vector.([0, 0, 0, 100, 100, 0]));
mc.graphics.endFill();
 
addChild(mc);
 
mc.x = (stage.stageWidth - mc.width) / 2;
mc.y = (stage.stageHeight - mc.height) / 2;

Podemos passar mais 6 valores e desenhar um outro triângulo.

This movie requires Flash Player 8.

var mc:Shape = new Shape();
mc.graphics.lineStyle(2, 0x000000);
mc.graphics.beginFill(0xFF0000);
mc.graphics.drawTriangles(Vector.<Number>([0, 0, 0, 100, 100, 0,
						0, 100, 100, 100, 100, 0]));
mc.graphics.endFill();
 
addChild(mc);
 
mc.x = (stage.stageWidth - mc.width) / 2;
mc.y = (stage.stageHeight - mc.height) / 2;

O segundo parâmetro são os índices, um Vector do tipo int, com a finalidade de reaproveitar as vértices. No vetor Vector.([0, 0, 0, 100, 100, 0, 0, 100, 100, 100, 100, 0]), repare que muitos pontos se repetem, usando índices o vetor não terá mais pontos duplicados. Cada ponto tem um número que começa do zero, portanto neste vetor citado 0, 100 é igual a 1, 0, 0 é igual a 0.

O exemplo anterior usando índices fica da seguinte forma:

var mc:Shape = new Shape();
mc.graphics.lineStyle(2, 0x000000);
mc.graphics.beginFill(0xFF0000);
mc.graphics.drawTriangles(Vector.<Number>([0, 0, 0, 100, 100, 0, 100, 100]),
				Vector.<int>([0, 1, 2, 1, 3, 2])
				);
mc.graphics.endFill();
 
addChild(mc);
 
mc.x = (stage.stageWidth - mc.width) / 2;
mc.y = (stage.stageHeight - mc.height) / 2;

O próximo parâmetro é o uvtData. Em uma imagem o ponto superior esquerdo é igual a 0, 0, o inferio 1 e o direito igual a 1. Sabendo disto o ponto inferior direito é igual a 1, 1; superior direito 0, 1; e assim por diante. O Vector do tipo Number do uvtData vai receber estes pontos para aplicar a imagem distorcida nos triângulos, este vetor deve ter o mesmo length do Vector dos vértices.

Os pontos dos índices vão de 0 a 1, você pode passar valores decimais, como .25, .3, .1, .9, etc.

This movie requires Flash Player 8.

var mc:Shape = new Shape();
mc.graphics.beginBitmapFill(new mummra(100, 100), null, false, true);
mc.graphics.drawTriangles(Vector.<Number>([0, 0, 150, 0, 150, 150, 300, 150]),
					Vector.<int>([0, 1, 2, 3, 2, 1]),
					Vector.<Number>([0, 0, 1, 0, 0, 1, 1, 1])
					);
 
addChild(mc);
 
mc.x = (stage.stageWidth - mc.width) / 2;
mc.y = (stage.stageHeight - mc.height) / 2;

Na classe que escrevi para desenhar uma Sphere pode-se ver a utilização do drawTringles mais complexa.

9 Responses to “Flash CS4, Classe drawTriangles”

  1. Juliano Says:

    Falando em eFlash3D, desculpa comentar aqui mas, instalei a classe na pastinha certa

    C:\Documents and Settings\juliano\Configurações locais\Dados de aplicativos\Adobe\Flash CS4\en\Configuration\Classes

    e no Flash ele deu erro de que nao consegiu achar a classe, está no lguar certo? Sempre coloco ai

  2. Erick Souza Says:

    Oi Juliano,
    Está certo, aqui eu crio uma pasta classes na raiz e aponto em preferences>actionscript : button actionscript 3.0 e adiciono essa pasta lá.. fica mais acessível para pode atualizar, deletar.

    Verifique se o script que você está usando é da mesma versão da classe, lá no google code o exemplo do cubo é para a primeira versão, vou aproveitar e tirar para não ocorrer enganos.

    Qualquer coisa só dar um toque.

  3. Cristiano Caldas (Simbionte Studios) Says:

    opa,
    rapz kkkkk se conhece akela pala “meu site nunca sai” kkkkkkkkkkk
    entao, esse ai tivemos que lançar o q ta no ar, mas putz…. tamo ja montando outro pq esse ai ficou meio “bugado” kkkkkk

  4. Erick Souza Says:

    Hehe, sei como é Cristiano, meu site portfolio eu já tinha desistido, mas andei animado, talvez agora eu o desenvolva.

  5. eFlash3D 0.2 update Sphere e Cube - Erick Souza Says:

    [...] post anterior comentei sobre o drawTriangles, este update vai ajudar a reforçar como este método pode ser usado, tanto a esfera 3D quanto o [...]

  6. Ricardo Mantovani Says:

    Beleza Erick, uma pergunta, o flash cs4 não funfa a “mc_tween2.as”, pq aqui não faz nada.

  7. Erick Souza Says:

    Oi Ricardo, o mc_tween2 funciona apenas no AS2, para AS3 você pode usar o Tweener.

  8. Marcelo Says:

    Erick, valew pelo post me ajudou bastante, a entender a questão dos triangulos… grande abraço

  9. SypePiereeSot traduction Says:

    Available world, everyone is paid in 2 coins: cash and experience. Take the experience first; the money can come later.
    It’s known as a pen. It’s being a printer, hooked straight away to my brain.

Leave a Reply