新 3D クラス開発日記(6) ~ 頂点を使った 3D 表現<1> 前編 ~
2007/02/07 22:02 - AS3.0
この項は以下のように前編・後編に分けておこないます。
- サンプルの再掲示と WorldVertex クラスの説明
- ソースの掲示と fla ファイルの説明
頂点やその表示( Vertex 、VertexTransform )の処理、マウスカーソル位置を頂点の移動距離に変換する処理など、3D 表現全体の統括・制御は、Aq3D 直下にある WorldVertex クラスが担います。
WorldVertex
このクラスは以下の4つのパートから構成されています。
- 生成(コンストラクタ)
- 初期化
- 頂点の登録
- onEnterFrame 開始
生成
生成時、次の 2 つを引数とします。
- 視点(省略可。規定値 200 )
- マウスカーソル位置を頂点の移動処理に変換するための変数(省略可。規定値 50 )
このクラスは Sprite を継承しており、このクラスがディスプレイリストに登録されたとき初期化が始まるようにリスナー登録します。
WorldVertex オブジェクトの生成・addChild 後に、タイムラインから初期化メソッドを呼び出しても結果は同じです。しかし自動化することにより、省力化と初期化メソッドの呼び出し忘れを防ぐことができるので、こうしています。
初期化
このメソッドでは、以下の処理をおこないます。
- このメソッドを呼び出したリスナーの削除
- このクラスの基準点をステージの中央へ移動
- マウスカーソル位置制御クラスの登録
- 頂点オブジェクトのディスプレイリスト元になる DisplayObjectContainer の生成
頂点の登録
呼び出し時、次の 3 つを引数とします。
- Vertex オブジェクト格納配列
- 頂点表示オブジェクトの表示タイプ
- タイプに応じたハッシュ( 第2引数が "normal" 、"none" のときは無指定)
第1引数の配列に格納する Vertex オブジェクトはタイムラインスクリプトで生成しておきます。
onEnterFrame 開始
onEnterFrame イベントに対して、以下の処理の一連の流れを登録します。
- マウスカーソル位置を各頂点の移動量に変換
- 求められた移動量に応じ、ExMatrix のプロパティを更新
- 頂点の座標に ExMatrix のプロパティを反映させ、表示オブジェクトの位置を更新
なお、配布ソースの WorldVertex では fogEffect と zsort に関わる記述がコメントアウトされていますが、これらについては Aq3D.util で説明します。