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 类不包含旋转信息,因此您需要一些结构来包含它。

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

您可以使用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 回答