Bitmap と Particle (3) Matrix
いまさらながらMatrixをやってみようかと。。一応何となくやってたのですが、
そろそろちゃんと覚えようかと。。BitmapData.draw()の引数にMatrixがあるので覚えておくべき!
これも全部BitmapとParticleのため!がんばるぞ
Matrixについての基本的な考えとかは、以下のエントリーがGood
それで色々注意した方がいいことは、
Matrix.deltaTransformPoint()とMatrix.transformPoint()は覚えておくと今後応用できそうなので覚えよう。
そろそろちゃんと覚えようかと。。BitmapData.draw()の引数にMatrixがあるので覚えておくべき!
これも全部BitmapとParticleのため!がんばるぞ
Matrixについての基本的な考えとかは、以下のエントリーがGood
それで色々注意した方がいいことは、
- Matirxの基準点はstageの左上になっている。
- translateメソッド,rotateメソッド,scaleメソッドはMatrixオブジェクトの各プロパティーの値を更新(追加)
matrix.translate(100, 0); matrix.translate(100, 0);
を行った場合、matrix.tx += 100;が2回行われるということになる。
つまり、元のプロパティーに対しての追加(新規に割り当てるわけではない)
scaleに至っては、1.5などと指定すると 元の値*1.5 ということに注意
- rotate -> transform と transform -> rotateでは実行結果が違うよ。
createBox()を使用した場合は、
identity() -> rotate() -> scale() -> translate() の各メソッドで実行されるっぽい
なので rotate -> transform の実行結果をイメージ - concat()で合成する場合は、clone()などで一時変数とかを利用したのを使った方がいい。
変形用のmatrixを合成concat()したら、無駄に計算されちゃうしね。
1 2 3 4 5 6 7 8 9 10 11 12
var BaseMatrix:Matrix = BaseMatrix.transform.matrix; var DataMatrix:Matrix = new Matrix(); //Dataの更新(追加) DataMatrix.transform(100); //合成用のマトリックスを使用。 var tmp:Matrix = DataMatrix.clone(); tmp.concat(baseMat); //元のオブジェクトに適用 BaseMatrix.transform.matrix = mat;
8,9,12の行を
DataMatrix.concat(baseMat); BaseMatrix.transform.matrix = DataMatrix;
で書き換えても可能だけれども、
DataMatrixにはbaseMatの合成値が入るので次回使用する場合に無駄な計算が入る。
Matrix.deltaTransformPoint()とMatrix.transformPoint()は覚えておくと今後応用できそうなので覚えよう。
Matrix オブジェクトで表現される図形変換を、指定されたポイントに適用したことによって値を返します。
- Matrix.transformPoint()は指定したポイントに対してMatrixで変換したポイントで返してくれるというもの
- Matrix.deltaTransformPoint()は指定したポイントに対してMatrix(tx,ty考慮しない)で変換したポイントで返してくれるというもの
1 2 3 4 5 6 7 8 9 10 | var matrix:Matrix = new Matrix(); var point:Point = new Point(50,50); //x,y 10倍の拡大 matrix.scale(10,10); //x,y 100の移動 matrix.translate(100,100); //50*10 (+100考慮しない) = 500 trace(matrix.deltaTransformPoint(point));//500,500 //50*10 + 100 = 500 trace(matrix.TransformPoint(point));//600,600 |
