Создание и перемещение трехмерных объектов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. ![]() Объект отображения можно одновременно перемещать и поворачивать в трехмерном пространстве. |
|