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

Array.sortOn()メソッド-後編-

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

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
面の前後は、Array.sortOn()メソッドを用いて整えます。
講師:
11:16

字幕

この Flash ムービーは メインタイムラインに 文字の書いた MovieClip インスタンスを 適当に置いてあります そして それぞれの インスタンスには この文字と同じ名前の インスタンス名が付けられています どういう練習をしようかというと このメインタイムラインに置かれている インスタンス全てを 全てと言っても 3 つですけれども x 座標の大きい順に並べ替えてみます 並べ替えるというのは配列に入れて 並べ替えるだけですから 画面上に何か違いが 出てくるわけではありません ではフレームアクションを書きますので キーフレーム右クリックして アクションパネルを開きましょう 先ずメインタイムラインに置いた- MovieClip インスタンス全てを 取り出すという処理です 幾つインスタンスがあるかは 予め特定されていない という前提でいきますので 子どもが幾ついるのかな ということから調べます nChildren という変数を これは整数ですので uint で型指定をします 今書いているスクリプトを書いている メインタイムラインに持っている- 子どものオブジェクトというのは numChildren というプロパティで調べられます これで数が分かります 私達は知っていますね 3 つだと 次に取り出したインスタンスを 入れる変数を用意します instance にしましょうか MovieClip なんですけれども 後々は Sprite を使う予定なので Sprite としておきます Sprite は MovieClip の 親にあたりますので 親で型指定する分には 問題ありません これは まだ変数を宣言するだけですね import 宣言が入りました これは このままにしておいて結構です 全て取り出すというのは for ステートメントというのを使います そして 1 個 2 個 3 個と 順番に取り出すための カウンタ変数と言いますけれども 変数を用意します これは i とするのが だいたいお約束事です uint で指定します 連番がついています 子どものオブジェクトには その連番の 0 からスタートしますので スタートする番号を先ず指定し 次に幾つまでいくのか これは子どもの数ですね 子どもの数全部になるまで for というのはループ処理です 全部取り出すまで何回もこの中の処理を 行いなさいということです 1 回行われる度に カウンタ変数をカウントアップして 0 1 2 とインデックスを取っていって 子オブジェクトを取り出します そうしたら取り出し方ですが ここに入れていくんですね 入れていくんですけれども コントロールもしくは コマンドドラッグでコピーしました ここで先程ご紹介した- getChildAt という メソッドを使います カウンタ変数が 0 1 2 と カウントアップしてくれますから それをここに入れる これで先ずインスタンスの 3 つ取り出しができます 本当に全部取り出されているかどうか 確認のために トレース関数を加えてみましょう trace のインスタンスでは ただ単に MovieClip と 出てくるだけですので インスタンスには instance 名を 付けておきました コマンドもしくは コントロールドラッグです ですから名前を出せば 分かりますね name ということで 名前を確認してみましょう ムービープレビューを確かめてみます 制御メニューから ムービープレビューです エラーが出てきました このエラーの意味なんですけれども 静的型 display オブジェクトの値が 関連しない可能性が高い型 Sprite に暗黙で変換されています ちょっと意味が 分かりにくいかもしれません パネルはタイムラインに切り替えます 原因はこの変数 instance という変数を Sprite 型で定めた所にあります instance に タイムラインから取り出した- 子どものオブジェクトを入れています けれども getChildAt で 取り出せるのは instance には限りません instance よりもっと広いんですね ところがもっと広いものを 狭いものに入れようとすると 怒られてしまいます けれども今回は Sprite 厳密に言えば Sprite の子どもの MovieClip なんですけれども それしかない ということが分かり切っています そういう時には これは Sprite だよということを as という演算子で教えてあげます as Sprite こうしてあげれば Sprite だからねといって instance という変数に入りますので エラーは出てこなくなります 改めてムービープレビューを 確かめましょう 制御メニューから ムービープレビューです 今度は出力パネルに インスタンスの名前が表示されました 0 1 2 となっています これはインスタンスを置いた順番です ですから元々の重ね順ということで 元々の重ね順は連番になっている ということが確かめられました では SWF を閉じます 下のパネルは タイムラインに戻しましょう 試したいのは配列の Array.sortOn という メソッドですので 配列を作らないといけないですね 配列名前は instance が 複数入りますので instances そして配列で型指定 Array です 空っぽの配列を作ります そうしたらこの配列ですね コピーしましょうか コントロールもしくはコマンドドラッグで 配列をコピーし ここに取り出したインスタンス インスタンスそのものよりも インスタンスの名前を 入れようと思うんですけれども それを加えます 加えるメソッドは push です そして sortOn を試す時は 中に入れるのは オブジェクトでないといけません ですからオブジェクト 空っぽのオブジェクトはこのように指定します 波括弧 2 つ向かい合わせます そして入れたいものは インスタンスの名前を入れたいので プロパティ名としては name という名前にして そこにインスタンスの名前を 設定します コントロールもしくは コマンドドラッグです ソートしたいのは x 座標ですよね ですからこれに更にプロパティを 加えたいと思うんですが x 座標をインスタンスの x 座標を 取り出しましょう var nX の Number とします そしてインスタンスの今度は単数ですね 単数の instance を コントロールもしくは コマンドドラッグで持ってきて その x 座標を入れます そうしたら このオブジェクトにもう 1 つ プロパティを加えます x という名前にしましょう そこに今取り出した nX の値を渡します これで配列が出来上がります そうしたら sortOn を試しましょう この後にインスタンスから オブジェクトを どんどん入れていって その後に sortOn を試します ソートするのは複数形の方ですね コントロールもしくは コマンドドラッグで持ってきて sortOn ですね どのプロパティで ソートするんですかというと このプロパティです x そして並べ方ですけれども 数値として並べ替えたいです NUMERIC ですね Array.NUMERIC しかも尚且つ大きい順 Array.DESCENDING これを単純に 2 つ並べてはいけません この間に縦棒 1 本 そうするとこの 2 つの条件が 組み合わせられたことになります これでソートが出来上がります もっともこのままでは 確認ができないので 確認をするためのまた for 文ですね 加えたいと思います 文法ここと一緒なので コントロールもしくは コマンドドラッグでコピーしてしまいます そして括弧閉じ trace をここに持ってきましょう 今度はコピーではありません 移動です そしてこれでは駄目で instance はこの中にないですからね instances 配列を見て その中の i 番目とすると その中にあるインスタンスが 取り出されますから オブジェクトが取り出されますので その中の name がどうなっていますか ということを調べてみたいと思います ムービープレビューを 確かめてみましょう 制御メニューから ムービープレビューです 今度は順番が変わりましたね 2 0 1 です x 座標の大きい順に見てみると mc2 mc0 mc1 ということで 並べ替えに成功しました ではまとめましょう 先ずは親 Sprite に入れた- 4 つの面の Sprite インスタンスの 前後関係の調べ方です Sprite の基準点を 画像の中心になるように 配置しましたので その中心の座標の z 座標を調べれば面の前後が 分かるということでしたね 次にメソッドを 2 つご紹介しました 1 つが配列に入れたオブジェクトを ある特定のプロパティの順番で 並べ替える- sortOn というメソッドです 引数にはどのプロパティで 並べ替えるのかという プロパティの名前を文字列で 第 1 に渡します そして 2 番目 これはオプションですけれども 並べ方の指定ができます 今回ご紹介したのは 大きい順の Array.DESCENDING と 数値として比較して並べ替えなさいという Array.NUMERIC です ご紹介した 2 つ目のメソッドは タイムラインや Sprite の中にある 子オブジェクトの 何番目の子オブジェクトをください という風にお願いする- getChildAt です 引数には連番で 0 から与えられている- ID 番号を指定します そして今回は x 座標の大きい順で 並べ替えてみる という練習をしました これができましたので 同じことを応用すれば z 座標で並べ替える ということも当然できます

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

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

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

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

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

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