前回の記事では,マトリクスを使用すると,インスタンスの位置や変形の情報を,スナップショットのようにして保管し,利用できる,ということを紹介しました。

 マトリクス情報を扱うMatrixクラスのインスタンスは,複数のマトリクスを合成して利用することもできます。図1のムービーでは,画面上に二つある星をドラッグして位置を移動したり,拡大/縮小を行うと,そのマトリクス情報を組み合わせてアニメーションを作成します。

図1●マトリクスを使ったアニメーション。位置・角度・拡大率を変えられます
図1●マトリクスを使ったアニメーション。位置・角度・拡大率を変えられます
[クリックすると別ウィンドウでムービーを表示します]

Matrixクラスの“正体”

 画面上に表示されているインスタンスを移動・変形させるために,マトリクスを使用する方法を復習しておきましょう。ステージ上にインスタンス「star」があるとします(図2)。

図2●インスタンスの準備
図2●インスタンスの準備

 このインスタンスの位置や変形の情報は,

star1.transform.matrix

で取得できます。

 マトリクス情報を使って,starの移動・変形を行いたい時は,インスタンスのtransform.matrixプロパティ(*1)に,マトリクス情報を管理するクラスである「Matrixクラス」のインスタンスを代入します。

star1.transform.matrix = Matrixクラスのインスタンス

 ここまでは,前回ご紹介しましたね。では,このMatrixクラスとは具体的にどんなクラスなのでしょう?

 端的に言うと,「位置と変形の情報のみを独立して管理できるクラス」です。単に座標や角度の情報を「保持している」だけではなく,位置や情報の情報を「更新する」ための便利なメソッド群も用意されています。

 Matrixクラスでは,位置と変形情報を扱うために,行列を利用しています。ヘルプによると,Matrixクラスは,「Matrix クラスは,二つの座標空間の間におけるポイントのマッピング方法を決定する変換マトリックス (変換行列) を表します」との説明があります。さらに,「変換行列オブジェクトは,次の内容を備えた 3 × 3 の行列です」との説明が続きます。

 この3×3の行列は,図3のようなものです。

図3●3×3の変換マトリクス 図3●3×3の変換マトリクス
(3×3の行列のうち,1番下の行の三つの値は,「0」「0」「1」で固定です。これは,Matrixクラスが,2次元空間のみを対象として扱うクラスとして,作成されているためです)

表1●マトリクス内の値
関連する変形 説明
 拡大/縮小 a  x軸方向のピクセルの位置への影響の度合い
d  y軸方向のピクセルの位置への影響の度合い
 回転/傾斜 b  x軸方向のピクセルの位置への影響の度合い
c  y軸方向のピクセルの位置への影響の度合い
 水平移動 tx  x軸方向に移動する距離
ty  y軸方向に移動する距離

 なぜ,行列の形で管理しているのかというと,位置や変形の情報同士を,足したり,掛けあわせたりといった合成をする際に,行列の計算を利用するのが便利だからです。2D,あるいは3Dのグラフィックス処理について学習されている方なら,この説明だけでピンと来るのではないかと思います。