Matrix オブジェクトの使用

Flash Player 9 以降、Adobe AIR 1.0 以降

Matrix クラスは、2 つの座標空間の間におけるポイントのマッピング方法を決定する変換マトリックスを表します。Matrix オブジェクトのプロパティを設定し、Matrix オブジェクトを Transform オブジェクトの matrix プロパティに適用し、次に Transform オブジェクトを表示オブジェクトの transform プロパティとして適用することで、表示オブジェクトに対する各種グラフィック変換を実行できます。これらの変換機能には、平行移動(xy の位置変更)、回転、拡大/縮小、傾斜などが含まれます。

マトリックスは、プロパティ(abcdtxty)を調整して直接に定義することもできますが、createBox() メソッドを使用して定義する方が簡単です。このメソッドのパラメーターでは、作成するマトリックスに定義する拡大/縮小、回転、平行移動の効果を直接に定義できます。 例えば、次のコードでは Matrix オブジェクトを作成して、水平方向に 2.0 倍、垂直方向に 3.0 倍拡大し、45 度回転させて、右に 10 ピクセル、下に 20 ピクセル移動します。

var matrix:Matrix = new Matrix(); 
var scaleX:Number = 2.0; 
var scaleY:Number = 3.0; 
var rotation:Number = 2 * Math.PI * (45 / 360); 
var tx:Number = 10; 
var ty:Number = 20; 
matrix.createBox(scaleX, scaleY, rotation, tx, ty);

Matrix オブジェクトの拡大/縮小、回転、平行移動のエフェクトは、scale()rotate()、および translate() メソッドを使用して調整することもできます。これらのメソッドで指定した値は、既存の Matrix オブジェクトに設定されている値と組み合わされます。 例えば、次のコードでは scale()rotate() メソッドを 2 回呼び出しているので、Matrix オブジェクトは 4 倍に拡大して 60 度回転します。

var matrix:Matrix = new Matrix(); 
var rotation:Number = 2 * Math.PI * (30 / 360); // 30° 
var scaleFactor:Number = 2; 
matrix.scale(scaleFactor, scaleFactor); 
matrix.rotate(rotation); 
matrix.scale(scaleX, scaleY); 
matrix.rotate(rotation); 
 
myDisplayObject.transform.matrix = matrix;

Matrix オブジェクトに傾斜変換を適用するには、オブジェクトの b または c プロパティをそれぞれ調整します。b プロパティを調整するとマトリックスが垂直方向に傾斜し、c プロパティを調整するとマトリックスが水平方向に傾斜します。次のコードでは、myMatrix Matrix オブジェクトが垂直に 2 倍傾斜しています。

var skewMatrix:Matrix = new Matrix(); 
skewMatrix.b = Math.tan(2); 
myMatrix.concat(skewMatrix);

Matrix による変換は、表示オブジェクトの transform プロパティに適用できます。例えば、次のコードでは myDisplayObject という表示オブジェクトにマトリックス変換を適用しています。

var matrix:Matrix = myDisplayObject.transform.matrix; 
var scaleFactor:Number = 2; 
var rotation:Number = 2 * Math.PI * (60 / 360); // 60° 
matrix.scale(scaleFactor, scaleFactor); 
matrix.rotate(rotation); 
 
myDisplayObject.transform.matrix = matrix;

1 行目では、myDisplayObject 表示オブジェクトで使用される既存の変換マトリックスに Matrix オブジェクトが設定されます(myDisplayObject 表示オブジェクトの transformation プロパティの matrix プロパティ)。こうすることで、表示オブジェクトの現状の位置、拡大率、回転角をふまえた上に、Matrix クラスメソッドの実行による効果を累積的に適用できます。

注意: flash.geometry パッケージには ColorTransform クラスも含まれていますが、 このクラスは Transform オブジェクトの colorTransform プロパティを設定する際に使用するものです。幾何学変換には使用しないので、ここでは説明しません。詳しくは、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』の ColorTransform クラスの項を参照してください。