创建和移动 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 空间中同时移动和旋转。 |
|