3D オブジェクトの作成と移動Flash Player 10 以降、Adobe AIR 1.5 以降 2D 表示オブジェクトを 3D 表示オブジェクトに変換するには、その z プロパティを明示的に数値に設定します。z プロパティに値を割り当てると、新しい Transform オブジェクトが表示オブジェクトに対して作成されます。DisplayObject.rotationX または DisplayObject.rotationY プロパティを設定することでも、新しい Transform オブジェクトが作成されます。Transform オブジェクトには、3D スペースでの表示オブジェクトの表現方法を管理する Matrix3D プロパティが含まれます。 次のコードでは、「leaf」という表示オブジェクトの座標を設定します。 leaf.x = 100; leaf.y = 50; leaf.z = -30; これらの値と、これらの値から派生するプロパティは、リーフの 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 軸に沿って 2 つの楕円を前後に移動します。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 という回転プロパティの設定に応じて、3 通りの方法で回転することができます。 次の図に、回転されていない 2 つの正方形を示します。 ![]() 次の図に、正方形のコンテナの rotationY プロパティをインクリメントして y 軸上で回転した場合の 2 つの正方形を示します。2 つの正方形のコンテナ、つまり親表示オブジェクトを回転すると、両方の正方形が回転します。 container.rotationY += 10; ![]() 次の図に、正方形のコンテナの rotationX プロパティを設定するとどうなるかを示します。これにより、正方形が x 軸上で回転します。 ![]() 次の図に、正方形のコンテナの rotationZ プロパティをインクリメントするとどうなるかを示します。これにより、正方形が z 軸上で回転します。 ![]() 表示オブジェクトは、3D 空間で移動と回転を同時に行うことができます。 |
![]() |