创建和移动 3D 显示对象
Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本
若要将 2D 显示对象转换为 3D 显示对象,可将其
z
属性明确设置为一个数值。如果为
z
属性指定一个值,则会为显示对象创建一个新的 Transform 对象。设置
DisplayObject.rotationX
或
DisplayObject.rotationY
属性也会创建新的 Transform 对象。Transform 对象包含
Matrix3D
属性,该属性控制显示对象在 3D 空间中的表示方式。
下面的代码设置名为“leaf”的显示对象的坐标:
leaf.x = 100; leaf.y = 50; leaf.z = -30;
在 leaf 的 Transform 对象的
matrix3D
属性中,可以查看这些值以及从这些值派生的属性:
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
类。
在 3D 空间中移动对象
通过更改对象的
x、y 或 z
属性的值,可以在 3D 空间中移动对象。如果更改
z
属性的值,对象看起来就会相应地靠近或远离观察者。
下面的代码在响应事件时,通过更改两个椭圆的
z
属性的值,沿着各自的 z 轴前后移动这两个椭圆。
ellipse2
的移动速度比
ellipse1
快:其
z
属性针对每个 Frame 事件增加 20 倍,而
ellipse1
的
z
属性增加 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;
}
}
在 3D 空间中旋转对象
可以通过三种方式旋转对象,具体采用哪一种取决于设置对象的
rotationX
、
rotationY
和
rotationZ
这三个旋转属性的方式。
下图显示两个未旋转的正方形:
下一个图显示两个正方形,它们在正方形容器的
rotationY
属性增大时在 y 轴上旋转。通过旋转这两个正方形的容器或父显示对象,可以旋转这两个正方形:
container.rotationY += 10;
下一个图显示当设置正方形容器的
rotationX
属性时发生的变化。此操作会在 x 轴上旋转正方形。
下一个图显示当增大正方形容器的
rotationZ
属性时发生的变化。此操作会在 z 轴上旋转正方形。
显示对象可以在 3D 空间中同时移动和旋转。
|
|
|