我无法弄清楚我需要做什么才能让我的游戏中的 sprite 对象具有 2D BoundingRectangle,根据用户希望 sprite 移动的方式旋转和更新位置。
我用它的旋转和缩放值绘制 Sprite ,如下所示:
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); }
}
以上是非常基本的,显然不会随 Sprite 旋转。 我已经阅读了一些 QA 帖子并尝试了各种方法,但它们似乎都没有实现我所追求的目标或造成非常奇怪的行为。
对于我需要做什么的一些建议,我将不胜感激。
最佳答案
Rectangle 类不包含旋转信息,因此您需要一些结构来包含它。
一个不错的选择是返回一个包含四个点的列表,这些点基于您现在返回的矩形和应用于它的旋转。
您可以使用 Matrix class 在一组点上应用旋转像这样:
var m = Matrix.CreateRotationZ(angle);
Vector3 rotatedVector = Vector3.Transform(vector, m);
如果你想围绕某个点旋转,比方说你的 Sprite 的中心,也应该做一个翻译:
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);
一定要检查可以用矩阵完成的所有其他转换,矩阵是游戏/图形开发中的核心元素。
关于c# - XNA 4.0 中的 2D BoundingRectangle 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552490/