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
.
我想在 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
.