ホーム > AS3 > Bitmap と Particle (3) Matrix

Bitmap と Particle (3) Matrix

2009 年 6 月 20 日 コメントをどうぞ コメント
いまさらながらMatrixをやってみようかと。。一応何となくやってたのですが、
そろそろちゃんと覚えようかと。。BitmapData.draw()の引数にMatrixがあるので覚えておくべき!
これも全部BitmapとParticleのため!がんばるぞ

Matrixについての基本的な考えとかは、以下のエントリーがGood


それで色々注意した方がいいことは、

  1. Matirxの基準点はstageの左上になっている。

  2. translateメソッド,rotateメソッド,scaleメソッドはMatrixオブジェクトの各プロパティーの値を更新(追加)

    matrix.translate(100, 0);
    matrix.translate(100, 0);

    を行った場合、matrix.tx += 100;が2回行われるということになる。
    つまり、元のプロパティーに対しての追加(新規に割り当てるわけではない)
    scaleに至っては、1.5などと指定すると 元の値*1.5 ということに注意

  3. rotate -> transform と transform -> rotateでは実行結果が違うよ。
    createBox()を使用した場合は、
    identity() -> rotate() -> scale() -> translate() の各メソッドで実行されるっぽい
    なので rotate -> transform の実行結果をイメージ

  4. 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のことは大体大丈夫!!そして補足として、

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




Bookmark and Share

関連する投稿

  1. コメントはまだありません。
  1. トラックバックはまだありません。