0

から継承されたクラスを作成し、Spriteその中心から回転するための次の関数を追加しました。

private function rotate(angle:Number):void
        {
            trace(width);

            var tmpWidth:Number = width;
            var rect:Rectangle = getBounds(parent); 
            var matrix:Matrix = transform.matrix;
            matrix.translate(-(rect.left + rect.width/2), -(rect.top + rect.height/2) );
            matrix.rotate((angle/180)*Math.PI); 
            matrix.translate((rect.left + rect.width/2), (rect.top + rect.height/2) );
            transform.matrix = matrix;

            trace(width);
        }

私の問題は、回転後にオブジェクトのサイズが変化することです。たとえば、変換前の幅の値は、変換後の幅よりも小さくなります。私は何を間違っていますか?

4

1 に答える 1

0

予期しない動作は見られません。

回転を適用しているため、回転後に幅と高さが異なる可能性があります。

たとえば、50x100 のスプライトに 90 度の回転を適用すると、100x50 のスプライトになります。

ただし、完全に正方形のオブジェクトで回転を実行し、90 度の回転を適用する場合、前後の幅は同じにする必要があります。

幅と高さは、オブジェクトの境界に基づいて計算されることに注意してください。オブジェクトを回転させると、オブジェクトの境界が変更され、幅と高さが変更される可能性があります。

于 2013-01-04T20:14:49.433 に答える