1

ゲーム内のスプライト オブジェクトの 2D BoundingRectangle を回転させ、ユーザーがスプライトを移動させたい方向に応じて位置を更新するために必要なことを理解するのに苦労しています。

次のように、回転とスケールの値を使用してスプライトを描画します。

spriteBatch.Draw(texture, position, null, Color.White, rotation, origin, scale, SpriteEffects.None, 1f);

BoundingRectangle を取得するための現在の設定は次のとおりです。

public Rectangle BoundingRectangle
{
    get { return new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height); }
}

上記は非常に基本的なもので、明らかにスプライトと一緒に回転しません。私はいくつかの QA 投稿を読み、さまざまなことを試しましたが、どれも私が求めているものを達成したり、非常に奇妙な動作を作成したりするようには見えません。

私が何をする必要があるかについてのいくつかの提案に感謝します。

4

1 に答える 1

4

Rectangle クラスには回転情報が含まれていないため、それを含む構造が必要です。

4 つのポイントのリストを返すことをお勧めします。これは、現在返している四角形とそれに適用された回転に基づいています。

次のようにMatrix クラスを使用して、一連のポイントに回転を適用できます。

var m = Matrix.CreateRotationZ(angle);
Vector3 rotatedVector = Vector3.Transform(vector, m);

特定のポイント、たとえばスプライトの中心を中心に回転させたい場合は、平行移動も行う必要があります。

var rotation = Matrix.CreateRotationZ(angle);
var translateTo = Matrix.CreateTranslation(vector);
var translateBack = Matrix.CreateTranslation(-vector);
var comnbined = translateTo * rotation * translateBack;
Vector3 rotatedVector = Vector3.Transform(vectorToRotate, combined);

マトリックスで実行できる他のすべての変換を確認してください。マトリックスは、ゲーム/グラフィックス開発のコア要素です。

于 2012-09-23T13:04:56.913 に答える