XNA 4.0中的2D BoundingRectangle旋转

时间:2012-09-23 12:50:22

标签: c# xna rotation xna-4.0 bounding-box

我无法解决我需要做的事情,以便在我的游戏旋转和更新位置中为精灵对象设置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帖子并尝试了各种各样的事情,但它们似乎都没有达到我所追求的目的或创造非常奇怪的行为。

我很感激有关我需要做些什么的建议。

1 个答案:

答案 0 :(得分:4)

Rectangle类不包含旋转信息,因此您需要一些结构来包含它。

一个很好的选择是返回一个包含四个点的列表,这四个点基于您现在返回的矩形以及应用于它的旋转。

您可以使用Matrix class对一组点应用旋转,如下所示:

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);

请务必查看可以使用矩阵完成的所有其他转换,矩阵是游戏/图形开发的核心元素。