Matrix
クラスは、2 つの座標空間の間におけるポイントのマッピング方法を決定する変換マトリックスを表します。Matrix オブジェクトのプロパティを設定し、Matrix オブジェクトを Transform オブジェクトの
matrix
プロパティに適用し、次に Transform オブジェクトを表示オブジェクトの
transform
プロパティとして適用することで、表示オブジェクトに対する各種グラフィック変換を実行できます。これらの変換機能には、平行移動(
x
と
y
の位置変更)、回転、拡大/縮小、傾斜などが含まれます。
マトリックスは、プロパティ(
a
、
b
、
c
、
d
、
tx
、
ty
)を調整して直接に定義することもできますが、
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 クラスメソッドの実行による効果を累積的に適用できます。