XNA绘制方法无意中偏移

时间:2013-08-17 22:06:18

标签: c# xna xna-4.0

对于我目前的项目,我正在尝试包含一个只在现场旋转的精灵。这应该很简单,但出于某种原因,XNA正在为我的精灵位置添加一个偏移量。

这是我正在使用的绘制方法:

spriteBatch.Draw(
             texture,   //texture2D
             position, //position Vector2
             null,  //source Rect (null draws whole texture)
             Color.White, //Color
             rotation, //rotation (float)
             new Vector2(position.X + (texture.Width / 2), position.Y +(texture.Height / 2)), //origin
             1f, //scale (float)
             SpriteEffects.None, //spriteEffects
             1); //layer depth

这里的位置是任意的,目前它被设置为视口的中间底部。 rotation是一个增量浮点数(递增0.1f),当单步执行代码时,原点和位置都保持正确的值。

但无论我尝试什么,精灵总是被绘制在离原点一定距离处。它围绕原点旋转,但是它不是一个中心轴,而是精灵在屏幕上拱起。

我已经尝试了XNA 4.0内置绘图方法的每个变体。任何提到轮换都有这种效果。 (基本(纹理,位置,颜色)方法,位置方面很好。 我也试过改变其他东西的纹理,说实话,我已经尝试了我能想到的一切。

我非常感谢任何帮助。如果需要一个更全面的例子,我将分享它,但老实说,除了这种方法之外,实际上并没有发生任何事情,这会影响它。

感谢您花时间阅读!

1 个答案:

答案 0 :(得分:2)

我认为你的问题在这里:

new Vector2(position.X + (texture.Width / 2), position.Y +(texture.Height / 2))

原点只是为了纹理的尺寸计算,所以如果你想让它围绕它的中心旋转,你只需要设置:

new Vector2(texture.Width / 2, texture.Height / 2)

您已经在第二个参数中设置了位置。