0

私は3D空間で動き回っている約20個のオブジェクトを扱っています。アドビでは、「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 に答える