Criação e movimentação de objetos de exibição 3D

Flash Player 10 e posterior, Adobe AIR 1.5 e posterior

Para converter um objeto de exibição 2D em um objeto de exibição 3D, você pode definir explicitamente a propriedade z correspondente com um valor numérico. Quando você atribui um valor para a propriedade z , é criado um novo objeto Transform para o objeto de exibição. Definir as propriedades DisplayObject.rotationX ou DisplayObject.rotationY também cria um novo objeto Transform. O objeto Transform contém uma propriedade Matrix3D que determina como o objeto de exibição é representado no espaço 3D.

O seguinte código define as coordenadas para um objeto de exibição chamado “leaf” (folha):

leaf.x = 100; leaf.y = 50; leaf.z = -30;

Você pode ver estes valores, bem como as propriedades derivadas deles, na propriedade matrix3D do objeto Transform da folha:

var leafMatrix:Matrix3D  = leaf.transform.matrix3D; 
 
trace(leafMatrix.position.x); 
trace(leafMatrix.position.y); 
trace(leafMatrix.position.z); 
trace(leafMatrix.position.length); 
trace(leafMatrix.position.lengthSquared);

Para obter informações sobre as propriedades do objeto Transform, consulte a classe Transform . Para obter informações sobre as propriedades do objeto Matrix3D, consulte a classe Matrix3D .

Movimentação de um objeto no espaço 3D

É possível movimentar um objeto no espaço 3D alterando os valores de suas propriedades x, y ou z . Quando você altera o valor da propriedade z , o objeto parece aproximar-se ou afastar-se do visualizador.

O código a seguir movimenta duas elipses para frente e para trás ao longo dos eixos z alterando o valor das respectivas propriedades z em resposta a um evento. ellipse2 movimenta-se mais rápido do que ellipse1 : sua propriedade z é aumentada por um múltiplo de 20 em cada evento Frame, enquanto a propriedade z de ellipse1 é aumentada por um múltiplo de 10:

var depth:int = 1000; 
 
function ellipse1FrameHandler(e:Event):void 
{ 
    ellipse1Back = setDepth(e, ellipse1Back); 
    e.currentTarget.z += ellipse1Back * 10; 
} 
function ellipse2FrameHandler(e:Event):void 
{ 
    ellipse2Back = setDepth(e, ellipse1Back); 
    e.currentTarget.z += ellipse1Back * 20; 
} 
function setDepth(e:Event, d:int):int 
{ 
    if(e.currentTarget.z > depth) 
    { 
        e.currentTarget.z = depth; 
        d = -1; 
    } 
    else if (e.currentTarget.z <  0) 
    { 
        e.currentTarget.z = 0; 
        d = 1; 
    } 
}

Rotação de um objeto no espaço 3D

É possível girar um objeto de três formas diferentes, dependendo de como você definir as propriedades de rotação do objeto: rotationX , rotationY e rotationZ .

A figura abaixo mostra dois quadrados que não são girados:

A próxima figura mostra os dois quadrados quando você incrementa a propriedade rotationY do contêiner dos quadrados para girá-los no eixo y. Girar o contêiner, ou o objeto de exibição pai, dos dois quadrados gira ambos os quadrados:

container.rotationY += 10;

A próxima figura mostra o que acontece quando você define a propriedade rotationX do contêiner dos quadrados. Isso gira os quadrados no eixo x.

A próxima figura mostra o que acontece quando você incrementa a propriedade rotationZ do contêiner dos quadrados. Isso gira os quadrados no eixo z.

Um objeto de exibição pode, ao mesmo tempo, se movimentar e girar no espaço 3D.