|
|
使用 Matrix3D 对象重新排序显示如前所述,显示列表中显示对象的层叠顺序确定了对象的显示顺序,这些对象的相对 z 轴值对显示顺序没有影响。如果您的动画将显示对象的属性转换为一种与显示列表中的顺序不同的顺序,则观察者看到的显示对象层叠顺序与 z 轴层叠顺序不一致。因此,在视觉上应当远离观察者的对象可能反而会靠近观察者。 为确保 3D 显示对象的层叠顺序对应于对象的相对深度,请使用如下方法:
这种重新排序方法可确保您的对象按照各自的相对 z 轴值进行显示。 下面的代码将 3D 框的六面设置为正确的显示顺序。这段代码对经过旋转的框的各面进行重新排序: public var faces:Array; . . .
public function ReorderChildren()
{
for(var ind:uint = 0; ind < 6; ind++)
{
faces[ind].z = faces[ind].child.transform.getRelativeMatrix3D(root).position.z;
this.removeChild(faces[ind].child);
}
faces.sortOn("z", Array.NUMERIC | Array.DESCENDING);
for (ind = 0; ind < 6; ind++)
{
this.addChild(faces[ind].child);
}
}
若要获取此范例的应用程序文件,请参阅 www.adobe.com/go/learn_programmingAS3samples_flash_cn。在 Samples/ReorderByZ 文件夹中可以找到这些应用程序文件。 |