单人游戏旋转精灵
本文关键字:精灵 旋转 游戏 单人 | 更新日期: 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值。