0

我正在处理大约 20 个在 3D 空间中移动的对象。Adobe 建议“使用 Matrix3D 对象重新排序显示”:

  1. 使用 Transform 对象的 getRelativeMatrix3D() 方法获取子 3D 显示对象的相对 z 轴。

  2. 使用 removeChild() 方法从显示列表中删除对象。

  3. 根据显示对象的相对 z 轴值对显示对象进行排序。

  4. 使用 addChild() 方法以相反的顺序将子项添加回显示列表。

伟大的。如果物体不移动,那很好。但是,如果发生动画并且在 z 空间中一个对象出现在另一个对象的前面怎么办?对象根据显示列表中的位置显示,而不是根据它们的 z 顺序。如何让对象在制作动画时尊重 z 顺序(如果对象 A 的 z 值变得小于对象 B,则使对象 A 出现在对象 B 的前面)?显然,您无法在动画期间清除显示列表。

4

1 回答 1

0

它实际上与 adobe 的文档所说的一样......它非常适合移动物体。

最简单的方法,所以你有一些代码参考,并且你有一个数组中的所有 3d 对象,会是这样的:

function zSort(objects:Array) {
    objects.sortOn("z", Array.DESCENDING | Array.NUMERIC); // sort the array on the "z" property
    for each(var clip:DisplayObject in objects) { //loop the array and add the childs in the corrected order...
        addChild(clip);
    }
}
于 2009-11-03T18:42:02.007 回答