Skapa och flytta 3D-objekt

Flash Player 10 och senare, Adobe AIR 1.5 och senare

Om du vill konvertera ett 2D-visningsobjekt till ett 3D-visningsobjekt anger du explicit dess z-egenskap till ett numeriskt värde. När du tilldelar ett värde till z-egenskapen, skapas ett nytt Transform-objekt för visningsobjektet. När du ställer in egenskapen DisplayObject.rotationX eller DisplayObject.rotationY skapas också ett nytt Transform-objekt. Transform-objektet innehåller en Matrix3D-egenskap som styr hur visningsobjektet visas i 3D-rymden.

Följande kod ställer in koordinaterna för ett visningsobjekt med namnet ”leaf”:

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

Dessa värden, samt egenskaper som härleds från dessa värden, visas i matrix3D-egenskapen för bladets Transform-objekt:

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

Mer information om egenskaperna för Transform-objektet finns i avsnittet om Transform-klassen. Mer information om egenskaperna för Matrix3D-objektet finns i avsnittet om Matrix3D-klassen.

Flytta ett objekt i 3D-rymden

Du kan flytta ett objekt i 3D-rymden genom att ändra värdena på dess x-, y- och z-egenskaper. När du ändrar värdet på z-egenskapen verkar det som om objektet flyttas närmare eller längre bort från vypunkten.

Följande kod flyttar två ellipser bakåt och framåt utmed deras z-axlar genom att ändra värdet på z-egenskaperna som svar på en händelse. ellipse2 flyttar snabbare än ellipse1: z-egenskapen för ellipse2 ökar med multipeln 20 vid varje Frame-händelse medan z-egenskapen för ellipse1 ökar med multipeln 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; 
    } 
}

Rotera ett objekt i 3D-rymden

Du kan rotera ett objekt på tre olika sätt, beroende på hur du ställer in objektets rotationsegenskaper: rotationX, rotationY och rotationZ.

I bilden nedan visas två fyrkanter som inte roterar:

I nästa bild visas de två fyrkanterna när du ökar rotationY-egenskapen för fyrkanternas behållare för att rotera dem vid y-axeln. Om du roterar behållaren, eller det överordnade visningsobjektet, roteras båda fyrkanterna:

container.rotationY += 10;

I nästa bild visas vad som händer när du ställer in rotationX-egenskapen för fyrkanternas behållare. Då roteras fyrkanterna vid x-axeln.

I nästa bild visas vad som händer när du ökar rotationZ-egenskapen för fyrkanternas behållare. Då roteras de vid z-axeln.

Ett visningsobjekt kan flytta och rotera samtidigt i 3D-ytan.