[XNA] Componente Barra de Energia para seu jogo
02/05/2010
Deixe um comentário
CategoriasComponentes, XNA
Barra de energia, Barra de saúde, Barra de vida, Componetes, Health Bar, Life Bar
Olá a todos, quando comecei a montar jogos sempre queria colocar algum cronometro para contar o tempo de jogo. Apesar de usarmos o XNA acabamos sempre tendo uma ou outra dúvida e no final não fazemos o cronometro. Então para você não se preocupar mais com isso, criei um componente chamado Chronometer que pode ser adicionado a qualquer jogo que possa fazer.
Segue código do cronometro:
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
/// <summary>
/// Component cronometro para o seu jogo
/// </summary>
public class Chronometer : DrawableGameComponent
{
#region Fields
// Posição de centro do cronometro
private Vector2 position;
// Font para escrever o tempo
private SpriteFont font;
// Cor da font do tempo
private Color color;
// Tempo inicial
private TimeSpan startTime;
// Tempo final
private TimeSpan finalTime;
// Tempo total de execução do jogo
private TimeSpan totalTime;
// Tempo total do cronometro
private TimeSpan time;
// Variavel booleana do tempo, indica se esta parado ou não
private bool stopped;
// SpriteBatch para desenhar
private SpriteBatch sBatch;
#endregion
#region Constructor
/// <summary>
/// Construtor do Cronometro
/// </summary>
/// <param name="game">Referência para o jogo que o chamou</param>
/// <param name="centerPosition">Posicao do centro do texto</param>
/// <param name="font">Font carregada</param>
/// <param name="color">Cor da font</param>
public Chronometer(Game game, Vector2 centerPosition, SpriteFont font, Color color)
: base(game)
{
this.game = game;
this.position = centerPosition;
this.font = font;
this.color = color;
this.startTime = new TimeSpan();
this.finalTime = new TimeSpan();
this.totalTime = new TimeSpan();
this.time = new TimeSpan();
this.stopped = true;
// Tenta receber a sprite batch do serviço caso esteja disponível
sBatch = (SpriteBatch)game.Services.GetService(typeof(SpriteBatch));
if (sBatch == null)
{
// Se o usuario não adicionou a sprite batch no serviço então criamos uma nova instância de sprite batch
sBatch = new SpriteBatch(((GraphicsDeviceManager)Game.Services.GetService(typeof(IGraphicsDeviceManager))).GraphicsDevice);
}
}
#endregion
#region Update
public override void Update(GameTime gameTime)
{
// Recebe o tempo passado do jogo
this.totalTime += gameTime.ElapsedGameTime;
if (!stopped) // Se o cronometro não esta parado, então somo o tempo
this.finalTime += gameTime.ElapsedGameTime;
// Atualiza o tempo do cronometro
this.time = finalTime - startTime;
base.Update(gameTime);
}
#endregion
#region Draw
public override void Draw(GameTime gameTime)
{
// Recebe o tamanho da escrita para calcular o centro
Vector2 size = font.MeasureString(ToString());
sBatch.Begin(SpriteBlendMode.AlphaBlend);
// Escreve o cronometro no centro conforme a posição indicada no construtor
sBatch.DrawString(font, ToString(), position - size / 2 , color);
sBatch.End();
base.Draw(gameTime);
}
#endregion
#region Methods
/// <summary>
/// Inicia o cronometro, ou se estiver parado continua a contagem
/// </summary>
public void Start()
{
this.stopped = false;
if (startTime == TimeSpan.Zero)
{
this.startTime = totalTime;
this.finalTime = totalTime;
this.time = new TimeSpan();
}
}
/// <summary>
/// Pausa o cronometro
/// </summary>
public void Stop()
{
this.stopped = true;
}
/// <summary>
/// Reinicia a contagem do cronometro
/// </summary>
public void Restart()
{
this.stopped = false;
this.startTime = totalTime;
this.finalTime = totalTime;
this.time = new TimeSpan();
}
/// <summary>
/// Zera a contagem do cronometro
/// </summary>
public void Reset()
{
this.stopped = true;
this.startTime = totalTime;
this.finalTime = totalTime;
this.time = new TimeSpan();
}
/// <summary>
/// Método para tranformar o TimeSpan em String
/// </summary>
/// <returns>retorna o tempo em string</returns>
public string ToString()
{
return time.ToString().Substring(0, 8);
}
#endregion
#region Properties
/// <summary>
/// Posição central do cronometro
/// </summary>
public Vector2 Position
{
get { return this.position; }
set { this.position = value; }
}
/// <summary>
/// Tempo do cronometro
/// </summary>
public TimeSpan Time
{
get { return this.time; }
set { this.time = value; }
}
#endregion
}
Modificações [02/02/2010]
Para usar o componente em seu jogo:
Para fazer download de um exemplo usando o componente clique aqui.
Se você já sabe com usar clique aqui e abaixo só o componente.
Abraços, espero que seja util para vocês.
Este tutorial foi movido para o site Ponto V.
Link para o tutorial: http://tinyurl.com/4hqqra2

Abraços a todo!