【问题标题】:Monogame rotating a spriteMonogame 旋转精灵
【发布时间】:2015-06-28 20:09:44
【问题描述】:

我正在尝试在 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);

【问题讨论】:

    标签: c# monogame image-rotation


    【解决方案1】:

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

    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 变量,它只是用于测试目的。 :)
    • 没问题。我很高兴你自己解决了。我认为值得解释细节。请将答案标记为已接受。干杯
    【解决方案2】:

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

    【讨论】:

    • 您应该将@craftworkgames的答案标记为已接受的答案,而不是将其作为您自己的答案并接受它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多