1

スプライトの4つのコーナーを表す4つのVector2オブジェクトを取得して、スプライト自体がその中心を中心に回転するようにしようとしています。ただし、次のコードでは、Vector2オブジェクトは、オブジェクトの中心を中心に回転するのではなく、クライアント空間で0,0を中心に回転します。行列変換を使用して、グローバル座標(0,0)の代わりにオブジェクトの中心を中心にVector2オブジェクトを回転させる方法はありますか?

これまでの回転の関数は次のとおりです。

public Vector2[] CheckCollision()
    {
        //Get the 4 corners of the sprite locally
        //We can get all 4 corners from only 2 vectors
        Vector2 topLeft = new Vector2(position.X - spriteSize.X, position.Y - spriteSize.Y);

        //Not sure why position is representing the
        //bottom right instead of the center here....
        Vector2 bottomRight = position;

        Vector2 bottomLeft = new Vector2(topLeft.X, bottomRight.Y);

        Vector2 topRight = new Vector2(bottomRight.X, topLeft.Y);

        //Create transformation matrix
        Matrix transform = Matrix.CreateRotationZ(MathHelper.ToRadians(this.direction)) *
            Matrix.CreateScale(this.scale);

        //Transform the vectors
        topLeft = Vector2.Transform(topLeft, transform);
        bottomRight = Vector2.Transform(bottomRight, transform);
        bottomLeft = Vector2.Transform(bottomLeft, transform);
        topRight = Vector2.Transform(topRight, transform);

        Vector2[] vectorArray = new Vector2[4];

        vectorArray[0] = topLeft;
        vectorArray[1] = bottomRight;
        vectorArray[2] = bottomLeft;
        vectorArray[3] = topRight;

        return vectorArray;

    }
4

1 に答える 1

0

を追加する前に最初に四隅を回転させspritePosition、回転とスケーリングが実行された後にスプライト位置を追加する方がおそらくはるかに簡単でしょう。

四隅を の対応する組み合わせにspriteSizeして、それが終わったらを の 4 つのベクトルにVector2.Transform追加するだけです。spritePositionvectorArray

于 2012-08-28T19:39:20.213 に答える