【问题标题】:Spritebatch won't draw if I use rotation如果我使用旋转,Spritebatch 不会绘制
【发布时间】:2014-04-06 06:42:07
【问题描述】:

我正在创建一个游戏,其中玩家被绘制在屏幕中间。为了修改玩家正在看的方向,我使用以下代码行: 在播放器类中,在 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);

【问题讨论】:

  • 我猜问题出在你是否设置了原点。你的中心向量。尝试使用 Vector2.Zero 而不是 center 看看会发生什么。
  • 在绘制玩家之前不应该调用base.Draw(gameTime);吗?
  • 谢谢@deathismyfriend,解决了!

标签: c# xna


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多