Matrix3D オブジェクトを使用した表示の並べ替え

前述のように、相対的な z 軸に関係なく、表示リスト内の表示オブジェクトのレイヤー順序によって表示のレイヤー順序が決定されます。アニメーションによって表示オブジェクトのプロパティが表示リスト順序とは異なる順序に変換される場合、ユーザーには、z 軸レイヤーに対応しない表示オブジェクトレイヤーが表示される場合があります。したがって、ユーザーから離れた場所に表示する必要のあるオブジェクトが、ユーザーに近い場所にあるオブジェクトの前に表示される場合があります。

3D 表示オブジェクトのレイヤーがオブジェクトの相対的な奥行きに対応していることを確認するには、次のようなアプローチを使用します。

  1. Transform オブジェクトの getRelativeMatrix3D() メソッドを使用して、子 3D 表示オブジェクトの相対的な z-axes を取得します。

  2. removeChild() メソッドを使用して、表示リストからオブジェクトを削除します。

  3. 相対的な z 軸値に基づいて表示オブジェクトを並べ替えます。

  4. addChild() メソッドを使用して、子を逆の順序で表示リストに再び追加します。

この並べ替えにより、相対的な z 軸に従ってオブジェクトが表示されることが保証されます。

次のコードでは、3D ボックスの 6 つの面が正しく表示されます。回転が適用された後で、ボックスの面を並べ替えます。

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_jp を参照してください。 アプリケーションのファイルは、Samples/ReorderByZ フォルダにあります。