ActionScript 3.0による3次元表現の基礎

インスタンスの重ね順を整える関数の定義-後編-

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
インスタンスの重ね順を整える関数は、新たに定めます。
講師:
05:50

字幕

4 つの面の Sprite の z 座標を比べれば 前後が分かるでしょう。 その考え方そのものは その通りなんですけれども もうちょっとよく考えてみましょう。 親の Sprite この丸で示した その中に 4 つの面が入れてあります。 座標はこんな風に 指定してあるんですけれども 回しているのは 親ごと回していますね。 回しているのは親です。 この丸い Sprite です。 中の面は 1 ピクセルたりとも 動いていません。 ですから面にそれぞれ あなたの座標は幾つと聞くと 何度聞いてもこの値は 変わらないんですね。 実はこの z 座標というのは 今回知りたかったのは 親の中の z 座標ではなくて この Sprite 親の Sprite が置かれている- メインタイムラインから見た z 座標が欲しかったんです。 ではそれにはどうしたら良いかというと 実はそのためのメソッドがあります。 面に直接あなたの z 座標は と聞いてしまうと 親の中の z 座標を答えますから 動かないんですね。 けれども面の transform プロパティを取って その transform プロパティが 持っているオブジェクトに対して getRelativeMatrix 3D と 長いですけれども メソッドを実行します。 その時にその括弧の中に ここから見たというオブジェクト 今回の場合は親ですね。 それを渡してしまいます。 そうすると親から見た座標に変換して Matrix 3D オブジェクトで 返してくれます。 知りたいのは座標なんですけれども Matrix 3D オブジェクトは 座標も持っています。 Matrix 3D オブジェクトから 座標を取り出すには position という プロパティを参照します。 そうすると座標 x y z を持った- Vector 3D というオブジェクトで 返してくれます。 そしてその Vector 3D に x とか y とか z とかという プロパティにアクセスすれば それぞれの座標値が取り出せます。 フレームアクションを書き直しましょう。 いけなかったのはここですね。 面に直接座標を聞いては いけないんです。 どうしてかというとその前に 面に対して その transform プロパティ そして getRelativeMatrix 3D というメソッドを呼び出して その中で 今スクリプトを書いている親ですね。 Sprite を置いてある このタイムラインから見た- 座標が知りたい という風にしてあげます。 そうすると これは Matrix 3D で 返すんですが更に position ですね。 position という プロパティを取れば x y z の座標を持った- Vector 3D という オブジェクトが返ります。 その変数を宣言しましょう。 myVector にしましょうか。 型指定は Vector 3D です 長いので改行した形にしますね。 イコールと この myVector Vector 3D のオブジェクトから z 座標を教えてもらえば良いわけなので これをコピーして こちらにペーストします。 一旦ファイルは保存しましょう。 ファイルメニューから「保存」です。 ムービープレビューで確かめましょう。 制御メニューから ムービープレビューです 重ね順がちゃんと変わりました。 ちょっと感動しますね。 並べ変わっただけなんですけれども そこまでの苦労を知っていると 感動もひとしおです。 では SWF を閉じてまとめましょう。 今回は面をその z 座標の順番で 並べ替える- SetOrder という関数を 定義しました。 処理の手順は先ず配列を作ります。 それから Sprite の中の 面のインスタンスの数を調べ for 文で回すためのカウンタ変数 それから Sprite 面のインスタンスを 取り出すための 変数を宣言した上で 面のインスタンスを順番に取り出して 先ず配列に加えます。 加え方は getChildAt で Sprite の中の面を 順番に取り出します。 そして z 座標を調べたいのですが 直接聞いてはいけない ということでした。 その面のインスタンスに対して 直接聞くのではなく transform のオブジェクトに getRelativeMatrix 3D というメソッドを渡して呼び出して その引数に ここから見た- 変換行列と言うんですけれども Matrix オブジェクトが欲しいと。 そしてその中の今回 position が知りたいので 位置が知りたいので position というプロパティで Vector 3D のオブジェクトが 取り出せます。 そうするとこのタイムラインから見た- Vector 3D の座標 その z ですね。 これでメインタイムラインから見た- 面の z 座標が分かります。 それを配列に入れるのですが sortOn で並べ替えるために オブジェクトとして エレメントを作っています。 その face というプロパティに 面の Sprite インスタンス z というプロパティに Vector から聞いた Vector 3D から聞いた z 座標を入れて 4 つですね。 4 つ全部含めます。 その上で sortOn z 座標のプロパティ z です。 このプロパティ値の順番で数値として 大きい順に並べ替えると。 そうしたら後は この配列から順番に オブジェクトを取り出し Sprite の中の 面のインスタンスも同じ順番に 揃えれば良いということで setChildIndex のメソッドで このオブジェクトをこの位置にという風に 指定することによって 正しく並べ替えができたわけです

ActionScript 3.0による3次元表現の基礎

このコースではActionScript 3.0の基礎を学んだ人を対象に、3次元空間を使ったオブジェクトの動かし方について学習します。ActionScript 3.0の3次元を扱うクラスの扱い方を説明するとともに、その基礎となる数学や物理の考え方についても解説します。

3時間53分 (29 ビデオ)
現在、カスタマーレビューはありません…
 

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。