Création et déplacement d’objets d’affichage 3D

Flash Player 10 et les versions ultérieures, Adobe AIR 1.5 et les versions ultérieures

Pour convertir un objet d’affichage 2D en objet d’affichage 3D, vous devez explicitement définir sa propriété z sur une valeur numérique. Lorsque vous affectez une valeur à la propriété z , un objet Transform est créé pour l’objet d’affichage. La définition des propriétés DisplayObject.rotationX ou DisplayObject.rotationY crée également un objet Transform. Celui-ci contient une propriété Matrix3D qui régit la représentation de l’objet d’affichage dans l’espace 3D.

Le code suivant définit les coordonnées d’un objet d’affichage appelé « leaf » (feuille) :

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

Vous pouvez visualiser ces valeurs, ainsi que les propriétés qui en dérivent, dans la propriété matrix3D de l’objet Transform de la feuille :

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

Pour plus d’informations sur les propriétés de l’objet Transform, voir la classe Transform . Pour plus d’informations sur les propriétés de l’objet Matrix3D, voir la classe Matrix3D .

Déplacement d’un objet dans l’espace 3D

Vous pouvez déplacer un objet dans l’espace 3D en modifiant la valeur de ses propriétés x, y ou z . Lorsque vous modifiez la valeur de sa propriété z , l’objet semble se rapprocher ou s’éloigner de l’observateur.

Le code suivant modifie la valeur de la propriété z de deux ellipses en réponse à un événement pour leur imprimer un mouvement de va-et-vient le long de leur axe z. ellipse2 se déplace plus rapidement qu’ ellipse1 : sa propriété z est incrémentée d’un multiple de 20 sur chaque événement Frame, alors que la propriété z d’ ellipse1 est incrémentée d’un multiple 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; 
    } 
}

Rotation d’un objet dans l’espace 3D

Vous pouvez faire pivoter un objet de trois façons différentes, selon la définition de sa propriété de rotation : rotationX , rotationY et rotationZ .

La figure ci-dessous illustre deux carrés qui ne sont pas soumis à une rotation :

Dans la figure suivante, la propriété rotationY du conteneur des carrés a été incrémentée pour les faire pivoter sur l’axe y. La rotation du conteneur, ou objet d’affichage parent, des deux carrés fait pivoter ceux-ci :

container.rotationY += 10;

Dans la figure suivante, la propriété rotationX du conteneur des carrés est modifiée : Elle fait pivoter ceux-ci sur l’axe x.

Dans la figure suivante, la propriété rotationZ du conteneur des carrés a été incrémentée et ceux-ci pivotent sur l’axe z.

Un objet d’affichage peut se déplacer et pivoter simultanément dans l’espace 3D.