Monogame 旋转精灵

Monogame rotating a sprite

我想在 Monogame 中旋转精灵,但出于某种原因我无法正确旋转!如果有人解释一下旋转的奥秘,我将不胜感激!

这是我用来绘制和旋转精灵的代码行,请注意变量 rotation 是我在每次更新时将其递增 0.1 的角度,这仅用于测试目的。如何使大炮围绕图像内部的原点旋转?例如围绕它的中心点像直升机螺旋桨? Check the video 查看这行代码的结果。

        spriteBatch.Draw(cannon.image, new Rectangle(300, 300, cannon.image.Width, cannon.image.Height), null, Color.White, rotation, new Vector2(0, 0), SpriteEffects.None, 0f);

答案:在新的 Vector2(x, y) 中,我只需要设置图像内的 x 和 y 值。

这看起来像您正在使用的重载:

public void Draw (
     Texture2D texture,
     Vector2 position,
     Nullable<Rectangle> sourceRectangle,
     Color color,
     float rotation,
     Vector2 origin,
     float scale,
     SpriteEffects effects,
     float layerDepth
)

问题是需要设置原点绕着旋转。在 MonoGame / XNA 中,原点以相对于纹理大小的像素为单位指定。所以要计算精灵的中心你需要做这样的事情:

var origin = new Vector2(texture.Width / 2f, texture.Height / 2f);

然后像这样调用精灵批量绘制方法:

spriteBatch.Draw(cannon.image, new Rectangle(300, 300, cannon.image.Width, cannon.image.Height), null, Color.White, y, origin, SpriteEffects.None, 0f);

最后,请不要使用 y 作为旋转的变量名,这可能会让其他程序员阅读您的代码时感到非常困惑。更好的名称是 rotation.