Создание и перемещение трехмерных экранных объектов

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Для преобразования двухмерного объекта отображения в трехмерный необходимо явно установить свойство z для числового значения. При присвоении значения свойству z для объекта отображения создается новый объект Transform. При установке значения для свойства DisplayObject.rotationX или DisplayObject.rotationY также создается новый объект Transform. Объект Transform содержит свойство Matrix3D , управляющее представлением экранного объекта в трехмерном пространстве.

Следующий код устанавливает координаты для объекта отображения с именем leaf:

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

Эти значения, а также производные от них свойства можно найти в свойстве matrix3D объекта Transform объекта отображения 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);

Сведения о свойствах объекта Transform см. в описании класса Transform . Сведения о свойствах объекта Matrix3D см. в описании класса Matrix3D .

перемещение объекта в трехмерном пространстве;

Можно перемещать объект в трехмерном пространстве путем изменения значений его свойств x, y, z . При изменении значения свойства z кажется, что объект приближается к наблюдателю или отдаляется от него.

Следующий код перемещает два эллипса вперед и назад по оси z с помощью изменения значения их свойств z в ответ на событие. Объект ellipse2 перемещается быстрее объекта ellipse1 : его свойство z увеличивается в 20 раз при каждом событии Frame, а свойство z объекта ellipse1 увеличивается в 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; 
    } 
}

поворот объекта в трехмерном пространстве;

Объект можно поворачивать тремя способами в зависимости от того, как устанавливаются свойства поворота объекта: rotationX , rotationY и rotationZ .

На следующем рисунке изображены два неповернутых квадрата:

На следующем рисунке представлены два квадрата при увеличении значения свойства их контейнера rotationY для поворота квадратов вокруг оси y. Поворот контейнера или вышестоящего объекта отображения двух квадратов выполняет поворот обоих квадратов:

container.rotationY += 10;

На рисунке представлен результат установки значения для свойства rotationX контейнера квадратов. Благодаря этому квадраты поворачиваются вокруг оси x.

На рисунке представлен результат увеличения значения свойства rotationZ контейнера квадратов. Благодаря этому фигуры поворачиваются вокруг оси z.

Объект отображения можно одновременно перемещать и поворачивать в трехмерном пространстве.