ActionScript 3.0で始めるオブジェクト指向スクリプティング

第36回 Matrix3Dクラスの後から加える変換

この記事を読むのに必要な時間:およそ 3 分

前回の第35回Matrix3Dクラスによる座標変換では,先に加える変換となるprependがついたMatrix3Dクラスのメソッドを試した。しかし,インスタンスに加わる変換は,スクリプトに書かれたものだけではないというヒントを示して終わった。今回は,その変換の中身を明らかにし,後から加えるappendのついた変換のメソッドを試す。

DisplayObjectインスタンスに加わる変換

例によって,まずは簡単なサンプルで確かめよう。ステージ中央にMovieClipインスタンスmy_mcを置き,2次元平面で90度回してみる※1)。これを初めの状態とする図1)。

図1 MovieClipインスタンスを2次元平面で90度回す

図1 MovieClipインスタンスを2次元平面で90度回す

MovieClipインスタンスを置いたタイムラインには,以下のフレームアクションを記述する。第1に注目してほしいのは,インスタンスのDisplayObject.transformプロパティから参照したTransform.matrix3Dに,Matrix3D()コンストラクタで生成した新規のオブジェクトを代入していることだ。これにより,インスタンスのもつ変換行列つまりMatrix3Dオブジェクトは,デフォルトに設定される。しかし第2に,インスタンスがもともともっていたMatrix3Dオブジェクトは,予め変数(myMatrix3D)にとっておいた。そして,インスタンスをクリックするとリスナー関数(setMatrix3D())によって,もとのMatrix3Dオブジェクトが改めて設定し直されるという流れだ。

// タイムライン: メイン
// タイムラインにMovieClipインスタンスmy_mcを配置
my_mc.z = 0;
var myMatrix3D:Matrix3D = my_mc.transform.matrix3D;
my_mc.transform.matrix3D = new Matrix3D();   // デフォルトのMatrix3Dオブジェクトを設定
my_mc.addEventListener(MouseEvent.CLICK, setMatrix3D);
function setMatrix3D(eventObject:MouseEvent):void {
  my_mc.transform.matrix3D = myMatrix3D;   // もとのMatrix3Dオブジェクトを設定
}

[ムービープレビュー]を確かめると,まずインスタンスはタイムラインの基準点つまりメインタイムラインなら左上隅に,回転していない(角度0)実寸(100%)で表示される図2左図)。つぎにインスタンスをクリックすると,前掲スクリプトのリスナー関数により,オーサリング時に設定したとおり,ステージ中央で90度横に回る図2右図)。

図2 デフォルトに戻ったインスタンスをクリックしてもとの状態にする

画像

実は,Flash Player内部でも,インスタンスはこのような手順で配置されている。つまり,まずタイムラインに置くべきデフォルト状態のインスタンスを取出し,その変換情報が納められたMatrix3Dオブジェクトを調べる。そして,そのMatrix3Dオブジェクトをインスタンスに適用して表示する。変換を前に加えるprependと後に加えるappendは,もとのMatrix3Dオブジェクトよりメソッドを適用するのが前か後かという意味なのだ。

※1
2次元平面の回転は,3次元空間でいえばz軸で回すことを意味する。しかし,[変形]パネルの[3D回転]セクションにおける[Z]の角度には反映されない(前掲図1参照)。これは前回説明した,3次元空間の操作を加えるまではDisplayObjectインスタンスにMatrix3Dオブジェクトが生成されないのと同じ理由による。

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書

コメント

コメントの記入