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

インスタンスをマウスポインタの水平位置に応じて回す

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

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
Matrix3D.prependRotation()メソッドで、マウスポインタの水平位置に応じてインスタンスを回します。
講師:
07:47

字幕

Matrix3D を使って インスタンスを水平に 回転させてみたいと思います インスタンスから マウスポインタが離れるほど 回転の速さは早くなります また離れる方向によって 回転する方向も変わります では swf は一旦閉じましょう アクションパネルも閉じます そして この完成品のムービーは閉じてしまって Matrix3D を使っていない このサンプルからスタートします 先ずステージに MovieClip インスタンスが置いてあって インスタンスに名前が付いています my_mc と言う名前です 次にメインタイムラインに フレームアクションが書かれていますので 右クリックで アクションパネルを開きましょう このムービーもまた マウスポインタの位置によって インスタンスが水平に回転します 先にムービープレビューを 確かめておきましょう 制御メニューからムービープレビューです インスタンスが回転します そしてマウスポインタの位置と 離れ具合によって回転する方向と スピードは変わっています では確認ができましたので swf は閉じましょう アニメーションの処理は EventListener で行っています addEventListener で イベントは ENTER_FRAME アニメーションの場合の基本です そこに Listener 関数を登録していて Listener 関数は こちらです 次 内容が この 2 行です 先ずマウスポインタの x 座標と この変数 変数はインスタンスの座標になっています インスタンスは中央に置いてあって 基準点も真ん中ですので 結局ステージの中央からの マウスポインタの x 座標の差ということになります それに対して 比率を定めているので それを掛け算することによって 余り回転が早くならないように 調整しています そうして定めた回転角を インスタンスの rotationY プロパティに加算しています Matrix3D ではなくて rotationY というプロパティを 使っている訳です これを Matrix3D オブジェクトを使った スクリプトに書き換えようと思います Matrix3D クラスで処理を行うには 先ずインスタンスの Matrix3D のオブジェクトを 取っておかなければなりません 変数ですね myMatrix にしましょう そして型指定は Matrix3D です 3D が付かないクラスもありますので ご注意ください インポート文が入ります これは このまま置いておいて結構です そしてインスタンス my_mc ですね transform というプロパティの Matrix3D これがインスタンスが持っている Matrix3D オブジェクトの参照です それが変数に入りました 次に回転は Matrix3D で行いますので このプロパティを使ったステートメントは 削除してしまいます そして改めて Matrix3D myMatrix という名前で 変数に入れました これをコントロール若しくはコマンド ドラッグでコピーして 回転は prependRotationです そして回転角ですが これは変数に入れた この数字を使います そして 2 番目は どの軸で回すか ということなんですが 軸は Vector というクラスで Vector3D というクラスで 定められています その中の y 軸で回したいと思います これはドットの Y_AXIS ということになります ではムービープレビューで 確かめてみましょう 制御メニューから ムービープレビューです なんかたくさんエラーが出ていますね swf を閉じましょう なんて書いてあるかというと これは 1 番嫌なエラーなんですけれど null のオブジェクト参照の プロパティまたはメソッドに アクセスすることはできません 言っていることは オブジェクトで何か操作しているけれど そのオブジェクトありませんよ ということなんです 多くの場合 Flash の アクションスクリプトのエラーというのは 何行めにエラーがありますよ と書いてくれるんですが この null のオブジェクトに関しては どこで そのエラーが起こったか分かりません ただ これは既に予定されていたことですので 理由をご説明しましょう 下のパネルはタイムラインに戻しておきます 犯人は これです transform.matrix3D これが null になっています なぜかと言いますと 3 次元の操作というのは 2 次元と比べてやはり負荷が係ります ですからデフォルトでは すべてのインスタンスは 3 次元で操作せずに 2 次元で操作するという設定になっています 3 次元で操作するためには 3 次元で操作するよと これからするんだよ ということを インスタンスに教えなければいけません そうしないと Matrix3D のオブジェクトに プロパティで参照しても空っぽと つまり null ということですね そのために これらの処理が できなくなってしまったということですね 空のオブジェクトに対して prependRotation というのは 実行できませんよ と言われてしまったんです では どうやって教えたら良いかというと 色々方法はあるんですが 1 番簡単なのは z 軸の操作をしてしまうことです my_mc. = 0 です 2 次元のオブジェクトの z 座標は 0 ということですから この操作によってオブジェクトの 見た目は何も変わりません ただ z 軸を操作したということは 3 次元の操作をするんだな ということで Matrix3D オブジェクトを 作ってくれるんです ですからこれで OK です ファイルは一旦保存しましょう ファイルメニューから保存です そしてムービープレビューを確かめます 制御メニューから ムービープレビューです 今度はエラーがでません インスタンスもちゃんと マウスポインタの位置に応じて 回転の方向と速さが変わっています 元々のプロパティで操作した場合と 結果は同じですけれども 同じ処理を Matrix3D の オブジェクトでやったということです では swf は閉じて まとめましょう Matrix3D クラスで行う インスタンスの回転の操作です 先ずインスタンスの Matrix3D オブジェクトを取り出します プロパティはインスタンスに対して DisplayObject のインスタンスに対して transform プロパティと さらに Matrix3D というプロパティで 参照を得ることができるんですが 1 つ注意ですね 重大な注意です その前に このインスタンスに対しては 3D の操作を行うよ という何らかの操作をする必要があります 最も簡単なのは z 座標を 0 にすることです これで無事に Matrix3D の オブジェクトが作られて変数に入ります その回転は prependRotation です 引数は第 1 引数が回転の角度 度数です そして第 2 引数は どの軸で回すか という軸の指定なんですが それは Vector3D というクラスの中の 定数になっていまして y 軸の場合には Y_AXIS です 定数ですので全部大文字で書きます これで Matrix3D クラスを使った インスタンスの回転ができます

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

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

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

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

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

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