Skip to main content

Creating and moving 3D display objects

To convert a 2D display object into a 3D display object, you can explicitly set its z property to a numeric value. When you assign a value to the z property, a new Transform object is created for the display object. Setting the DisplayObject.rotationX or DisplayObject.rotationY properties also creates a new Transform object. The Transform object contains a Matrix3D property that governs how the display object is represented in 3D space.

The following code sets the coordinates for a display object called "leaf":

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

You can see these values, as well as properties derived from these values, in the matrix3D property of the Transform object of the leaf:

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

For information about the properties of the Transform object, see the Transform class. For information about the properties of the Matrix3D object, see the Matrix3D class.

Moving an object in 3D space

You can move an object in 3D space by changing the values of its x, y, or z properties. When you change the value of the z property the object appears to move closer or farther away from the viewer.

The following code moves two ellipses back and forth along their z-axes by changing the value of their z properties in response to an event. ellipse2 moves faster than ellipse1 : its z property is increased by a multiple of 20 on each Frame event while the z property of ellipse1 is increased by a multiple of 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;
}
}

Rotating an object in 3D space

You can rotate an object in three different ways, depending on how you set the object's rotation properties: rotationX, rotationY, and rotationZ.

The figure below shows two squares that are not rotated:

The next figure shows the two squares when you increment the rotationY property of the container of the squares to rotate them on the y- axis. Rotating the container, or parent display object, of the two squares rotates both squares:

container.rotationY += 10;

The next figure shows what happens when you set the rotationX property of the container for the squares. This rotates the squares on the x- axis.

The next figure shows what happens when you increment the rotationZ property of the container of the squares.This rotates the squares on the z-axis.

A display object can simultaneously move and rotate in 3D space.