2015-06-28 224 views
1

我想旋转Monogame中的精灵,但由于某种原因,我无法正确理解它!如果有人解释旋转的奥秘,我会很感激!Monogame旋转精灵

这是我用来绘制和旋转我的精灵的代码行,只是一个注释变量y是我在每次更新时将它增加0.1的角度,这只是为了测试目的。我如何使加农炮围绕图像内的原点旋转?例如在直升机螺旋桨的中心点附近? Check the video查看这行代码的结果。

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

回答

8

这看起来像你使用过载:

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

+0

谢谢,这确实是个问题,我没有设置正确的原点。就y变量而言,它仅用于测试目的。 :) – Darkbound

+0

没问题。我很高兴你自己整理出来。我认为这是值得解释的细节。请将答案标记为已接受。干杯 – craftworkgames

0

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

+1

您应该将@craftworkgames的答案标记为已接受的答案,而不是将其作为您自己的答案提及并接受它! –