2011-10-01 63 views
1

我添加了一個SpriteFont類到我的HUD,這就是我得到:XNA C#HUD SpriteFont類

http://i557.photobucket.com/albums/ss13/KookehMonsters/Dev/Untitled-1.png

所有這些白點是從我的相機平移和文字一起以下。 發生了什麼事?

 Label displayName = new Label(); 

     displayName.Text = "DisplayName"; 
     displayName.Size = displayName.SpriteFont.MeasureString(displayName.Text); 
     displayName.Position = new Vector2((int)player.Camera.Position.X, (int)player.Camera.Position.Y); 

     ControlManager.Add(displayName); 

     ControlManager.Draw(GameRef.SpriteBatch); 

Label.cs

public class Label : Control 
{ 
    public Label() 
    { 
     tabStop = false; 
    } 

    public override void Update(GameTime gameTime) 
    { 
    } 

    public override void Draw(SpriteBatch spriteBatch) 
    { 
     spriteBatch.DrawString(SpriteFont, Text, Position, Color); 
    } 

    public override void HandleInput() 
    { 
    } 
} 

更新從GamePlayScreen.cs

方法
public override void Update(GameTime gameTime) 
    { 
     player.Update(gameTime); 
     sprite.Update(gameTime); 
     hud.Update(gameTime); 

     if (InputHandler.KeyReleased(Keys.Add)) 
     { 
      player.Camera.ZoomIn(); 
      if (player.Camera.CameraMode == CameraMode.Follow) 
       player.Camera.LockToSprite(sprite); 
     } 
     else if (InputHandler.KeyReleased(Keys.Subtract)) 
     { 
      player.Camera.ZoomOut(); 
      if (player.Camera.CameraMode == CameraMode.Follow) 
       player.Camera.LockToSprite(sprite); 
     } 

     Vector2 motion = new Vector2(); 

     if (InputHandler.KeyDown(Keys.W)) 
     { 
      sprite.CurrentAnimation = AnimationKey.Up; 
      motion.Y = -1; 
     } 
     else if (InputHandler.KeyDown(Keys.S)) 
     { 
      sprite.CurrentAnimation = AnimationKey.Down; 
      motion.Y = 1; 
     } 

     if (InputHandler.KeyDown(Keys.A)) 
     { 
      sprite.CurrentAnimation = AnimationKey.Up; 
      motion.X = -1; 
     } 
     else if (InputHandler.KeyDown(Keys.D)) 
     { 
      sprite.CurrentAnimation = AnimationKey.Down; 
      motion.X = 1; 
     } 

     if (motion != Vector2.Zero) 
     { 
      sprite.IsAnimating = true; 
      motion.Normalize(); 

      sprite.Position += motion * sprite.Speed; 
      sprite.LockToMap(); 

      if (player.Camera.CameraMode == CameraMode.Follow) 
       player.Camera.LockToSprite(sprite); 
     } 
     else 
     { 
      sprite.IsAnimating = false; 
     } 

     if (InputHandler.KeyReleased(Keys.F)) 
     { 
      player.Camera.ToggleCameraMode(); 
      if (player.Camera.CameraMode == CameraMode.Follow) 
       player.Camera.LockToSprite(sprite); 
     } 

     if (player.Camera.CameraMode != CameraMode.Follow) 
     { 
      if (InputHandler.KeyReleased(Keys.C)) 
      { 
       player.Camera.LockToSprite(sprite); 
      } 
     } 

     base.Update(gameTime); 
    } 

GamePlayScreen.cs

的繪製方法
public override void Draw(GameTime gameTime) 
    { 
     GameRef.SpriteBatch.Begin(
      SpriteSortMode.Deferred, 
      BlendState.AlphaBlend, 
      SamplerState.PointClamp, 
      null, 
      null, 
      null, 
      player.Camera.Transformation); 

     map.Draw(GameRef.SpriteBatch, player.Camera); 

     sprite.Draw(gameTime, GameRef.SpriteBatch, player.Camera); 

     hud.Draw(gameTime); 

     base.Draw(gameTime); 

     GameRef.SpriteBatch.End(); 
    } 
+1

第一塊代碼寫在哪裏?一個用ControlManager.Draw(GameRef.SpriteBatch); 您要麼在新位置的每一幀重新創建大量標籤,要麼不清除之前標籤繪製的屏幕。我需要看到更多的代碼才能確定。 – Benjamin

+0

我在原文中添加了一些代碼。 – KeyHeart

回答

2

不要畫HUD相機轉換,當然也有不使用相機更新你的hud位置,因爲它們現在已經修復。

public override void Draw(GameTime gameTime) 
{ 
    GameRef.SpriteBatch.Begin(
     SpriteSortMode.Deferred, 
     BlendState.AlphaBlend, 
     SamplerState.PointClamp, 
     null, 
     null, 
     null, 
     player.Camera.Transformation); 

    map.Draw(GameRef.SpriteBatch, player.Camera); 

    sprite.Draw(gameTime, GameRef.SpriteBatch, player.Camera); 

    base.Draw(gameTime); 

    GameRef.SpriteBatch.End(); 

    GameRef.SpriteBatch.Begin(); 
    hud.Draw(gameTime); 
    GameRef.SpriteBatch.End(); 
}