单人游戏旋转精灵

本文关键字:精灵 旋转 游戏 单人 | 更新日期: 2023-09-27 18:00:25

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

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

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

单人游戏旋转精灵

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

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

然后调用sprite批量绘制方法,如下所示:

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

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

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