如果我使用旋转,Spritebatch将不会绘制

时间:2014-04-05 19:09:01

标签: c# xna

我正在创建一个游戏,其中玩家在屏幕中间绘制。为了修改玩家所期望的方向,我使用以下代码行: 在播放器类中,在Draw()函数中:

//Draw player
public void Draw(SpriteBatch spriteBatch)
{
   spriteBatch.Draw(currentTexture, position, null, Color.White, rotation, centre, 1.0f, SpriteEffects.None, 0f);
}

我在Draw()函数中的主类中调用该函数:

//Draw
protected override void Draw(GameTime gameTime)
{
   GraphicsDevice.Clear(Color.Black);
   spriteBatch.Begin();

   //Draw player
   player.Draw(spriteBatch);

   spriteBatch.End();
   base.Draw(gameTime);
}

播放器未被绘制,并且没有出现错误。

奇怪的是,我在两天前制作的游戏中使用了完全相同的代码来绘制它并且工作正常。

如果我改为使用以下几行,则会绘制播放器,但我没有修改播放器旋转的能力,除非我为每个方向使用不同的纹理:

spriteBatch.Draw(currentTexture, position, Color.White);

2 个答案:

答案 0 :(得分:1)

我猜你的问题在于你设定了原点。你的中心向量。尝试使用Vector2.Zero而不是中心,看看会发生什么。

答案 1 :(得分:0)

对于你的中心向量,你可能想要纹理的中心。 SpriteBatch.Draw中的Vector2中心参数相对于纹理坐标。这意味着要围绕对象的中心旋转,您需要具有值

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

我建议在你的播放器类中创建一个方法(如果你正在做那种事情,可以使用GameObject类),使用相对于Vector2的纹理坐标返回你的中心(就像我上面提到的那样)!快乐的编码!