Monogame 旋转精灵图像。

4
我正在尝试在Monogame中旋转一个精灵,但出现了问题!如果有人能解释一下旋转的奥秘,我将不胜感激!
这是我用来绘制和旋转我的精灵的代码行,注意变量rotation是我在每次Update时递增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);
2个回答

15

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

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


谢谢,确实是这个问题,我没有设置正确的起点。至于y变量,那只是为了测试目的。 :) - Darkbound
没问题,我很高兴你自己解决了它。我觉得讲解细节是值得的。请标记答案为已接受。干杯 - craftworkgames

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

2
你应该将@craftworkgames的答案标记为被接受的答案,而不是将其作为你自己的答案并接受它! - Syed Waqas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接