title: XNA C# Creating a Heads Up Display
body: <p>I was wondering how to approach creating a HUD.
  I currently have health, mana, and experience bar drawn to the screen at set coordinates. Downside of this is that when the camera pans the bars stay at their set coordinates, I want them to adjust to the viewport or not be influenced by positions but just simply drawn to the screen.</p>
  
  <ul>
  <li><p>Edit
  I managed to get the HUD to adjust using the camera's x and y coordinates.
  I've created a separate class for drawing the HUD, but now they don't adjust.</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using Microsoft.Xna.Framework;
  using Microsoft.Xna.Framework.Graphics;
  using Microsoft.Xna.Framework.Input;
  using GameOne.Components;
  
  
  
  
  namespace GameOne.GameScreens
  {
  
  public class HUD : BaseGameState
  {
  
  Player player;
  
  Texture2D HealthBar;
  Texture2D HealthBarPositive;
  Texture2D HealthBarNegative;
  Texture2D ManaBar;
  Texture2D ManaBarPositive;
  Texture2D ManaBarNegative;
  Texture2D ExpBar;
  Texture2D ExpBarPositive;
  
  int CurrentHealth = 100;
  int CurrentMana = 45;
  int CurrentExp = 0;
  
  public HUD(Game game, GameStateManager manager)
      : base(game, manager)
  {
      player = new Player(game);
  }
  
  public void LoadContent()
  {
      base.LoadContent();
  
      HealthBar = Game.Content.Load&lt;Texture2D&gt;(@"GUI\healthBar");
      HealthBarPositive = Game.Content.Load&lt;Texture2D&gt;(@"GUI\healthBarPositive");
      HealthBarNegative = Game.Content.Load&lt;Texture2D&gt;(@"GUI\healthBarNegative");
      ManaBar = Game.Content.Load&lt;Texture2D&gt;(@"GUI\manaBar");
      ManaBarPositive = Game.Content.Load&lt;Texture2D&gt;(@"GUI\manaBarPositive");
      ManaBarNegative = Game.Content.Load&lt;Texture2D&gt;(@"GUI\manaBarNegative");
      ExpBar = Game.Content.Load&lt;Texture2D&gt;(@"GUI\expBar");
      ExpBarPositive = Game.Content.Load&lt;Texture2D&gt;(@"GUI\expBarPositive");
  }
  
  public void Update(GameTime gameTime)
  {
      if (InputHandler.KeyDown(Keys.F1))
      {
          CurrentHealth += 1;
      }
  
      if (InputHandler.KeyDown(Keys.F2))
      {
          CurrentHealth -= 1;
      }
  
      if (InputHandler.KeyDown(Keys.F3))
      {
          CurrentMana += 1;
      }
  
      if (InputHandler.KeyDown(Keys.F4))
      {
          CurrentMana -= 1;
      }
  
      if (InputHandler.KeyDown(Keys.F5))
      {
          CurrentExp += 1;
      }
  
      if (InputHandler.KeyDown(Keys.F6))
      {
          CurrentExp -= 1;
      }
  
      CurrentHealth = (int)MathHelper.Clamp(CurrentHealth, 0, 100);
      CurrentMana = (int)MathHelper.Clamp(CurrentMana, 0, 45);
      CurrentExp = (int)MathHelper.Clamp(CurrentExp, 0, 500);
  }
  
  public void Draw(GameTime gameTime)
  {
  
      GameRef.SpriteBatch.Draw(
          HealthBarNegative,
          new Rectangle((int)player.Camera.Position.X + 150, (int)player.Camera.Position.Y + 630, 150, 15),
          Color.White);
  
      GameRef.SpriteBatch.Draw(
          HealthBarPositive,
          new Rectangle((int)player.Camera.Position.X + 150, (int)player.Camera.Position.Y + 630, 150 * (int)CurrentHealth / 100, 15),
          Color.White);
  
      GameRef.SpriteBatch.Draw(
          HealthBar,
          new Rectangle((int)player.Camera.Position.X + 150, (int)player.Camera.Position.Y + 630, 150, 15),
          Color.White);
  
      GameRef.SpriteBatch.Draw(
          ManaBarNegative,
          new Rectangle((int)player.Camera.Position.X + 150, (int)player.Camera.Position.Y + 650, 150, 15),
          Color.White);
  
      GameRef.SpriteBatch.Draw(
          ManaBarPositive,
          new Rectangle((int)player.Camera.Position.X + 150, (int)player.Camera.Position.Y + 650, 150 * (int)CurrentMana / 45, 15),
          Color.White);
  
      GameRef.SpriteBatch.Draw(
          ManaBar,
          new Rectangle((int)player.Camera.Position.X + 150, (int)player.Camera.Position.Y + 650, 150, 15),
          Color.White);
  
      GameRef.SpriteBatch.Draw(
          ExpBarPositive,
          new Rectangle((int)player.Camera.Position.X + 10, (int)player.Camera.Position.Y + 680, 1260 * (int)CurrentExp / 500, 15),
          Color.White);
  
      GameRef.SpriteBatch.Draw(
          ExpBar,
          new Rectangle((int)player.Camera.Position.X + 10, (int)player.Camera.Position.Y + 680, 1260, 15),
          Color.White);
  }
  }
  }
  </code></pre></li>
  </ul>