2013-08-17 31 views
1

对于我当前的项目,我试图包含一个只是在现场旋转的精灵。这应该很容易,但由于某种原因,XNA正在为我的精灵位置添加一个偏移量。XNA绘图方法无意中偏移

下面是draw方法我用:

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 

位置是任意的位置,目前它被设置为视口的中间底部。旋转是一个增量浮点数(增量为0.1f),并且在遍历代码时,原点和位置都保持正确的值。

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

我已经尝试了XNA 4.0内置绘图方法的每个变体。任何提到旋转的都有这种效果。 (在基本的(纹理,位置,颜色)方法,位置方面很好。 我也尝试改变其他东西的纹理,老实说我已经试过了我能想到的所有东西。非常感谢任何帮助,如果需要一个更彻底的例子,我会分享它,但老实说,这种方法之外没有任何事情会发生,这会影响它的效果。

回答

2

我觉得你的问题是在这里:

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

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

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

你已经设置的第二个参数的位置。

+0

乐于助人,你的名字是pinckerman!非常感谢你,完全解决了这个问题,并且我对XNA的理解也在增长! –

+0

不客气,Erik。 – pinckerman