[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Introdução
Durante um jogo, geralmente você irá precisar realizar calculos ou atualizar valores após certo tempo. Um exemplo disto é você recalcular a rota de um inimigo etc. Independente do que você irá fazer, é muito util ter conhecimento sobre os Timers no C#. Imagine que você esteja querendo criar um jogo ao estilo PacMan. Toda a rota criada pelo algoritmo de Inteligência Artificial terá que ser calculada já que você pode andar pelo cenário. O problema é que fazer isto uma vez por frame além de deixar o jogo muito dificil, pois o inimigo sempre terá o melhor caminho, irá consumir muito recurso, já que o calculo não é dos menores e executar o mesmo 60 vezes por segundo é um tanto desnecessário.
A saída para este problema é você executar o algoritmo para atualizar a rota após X segundos. Pode ser a cada 8, 4 ou qualquer valor que queira.
Como funciona um Timer
Veja na imagem abaixo, um pequeno diagrama mostrando o funcionamento de um Timer:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
#1 Passo - Adicionando o NameSpace adequado
Para termos acesso à classe Timer e suas funções devemos adicionar o seguinte namespace junto aos que estão no topo do arquivo:
Código:
using System.Timers;
Com isto adicionado ao topo do arquivo vamos ao próximo passo!
#2 Passo – Criando um Timer
O próximo passo, é criar uma váriavel do tipo Timer, que ficará responsável por realizar a contagem do tempo.
Você deve definir a váriavel da seguinte maneira:
Código:
Timer timerMoveSprite;
No caso, você mesmo pode escolher o nome que mais lhe agrade.
#3 Passo - Inicializando o Timer
Você pode inicializar um Timer de duas formas diferentes. A primeira é inicializar e definir o intervalo direto na inicialização e a outra é inicializar e definir o intervalo depois. Veja o código abaixo:
1º Inicializar e Definir o Intervalo Direto no Construtor:
Código:
timerMoveSprite = new Timer(2000);
No caso desta solução, passamos o intervalo (em milisegundos) como parâmetro para o construtor. Importante: O intervalo deve vir em milisegundos, ou seja, o número de segundos * 1000. No exemplo, 2000 milisegundos equivalem à 2 segundos.
2º Inicializar e Definir o Intervalo Posteriormente:
Código:
timerMoveSprite = new Timer();
timerMoveSprite.Interval = 2000;
Nesta abordagem nós inicializamos ele sem um intervalo definido. Mas logo abaixo, definimos o intervalo em milisegundos.
Dica: Você pode redefinir o intervalo simplesmente mudando o valor da váraivel Interval , como é mostrado no exemplo acima! Isto significa que você pode ir diminuindo ou aumentando o intervalo do Timer.
#4 Passo - Definindo se o intervalo deve ser repetido ou não
Você pode querer que o intervalo se repita infinatamente ou talvez não queira. Portanto, você pode mudar a propriedade AutoReset do Timer como false ou true.
Definir a mesma como false faz o Timer chamar a função quando o intervalo for atingido somente uma vez.
Definir como true faz com que o Timer chame a função quando o intervalo for atingido infinitamente, até com que o mesmo seja desabilitado.
Veja o código:
Código:
timerMoveSprite.AutoReset = false; // Somente uma Vez
timerMoveSprite.AutoReset = true; // Repete até que seja desabilitado
Dica: Desabilitar um Timer pode ser feito definindo a propriedade Enabled como sendo igual à false OU podemos chamar a função Stop(); do nosso Timer. Veja isto em código:
Código:
timerMoveSprite.Enabled = false; // Desabilita o Timer
timerMoveSprite.Stop(); // Também desabilita o Timer
#5 Passo – Chamando uma função quando atingir o Intervalo
Um dos passos mais importantes é adicionar uma função à ser chamada quando o intervalo for atingido, pois sem esta função o Timer irá ficar contando e mais nada. Agora, ao adicionar uma função a mesma será chamada toda vez que o intervalo for atingido.
A primeira coisa a fazer é criar uma função para isto. Não há nenhum mistério. A diferença é que a função deve aceitar dois tipos de parâmetros: um do tipo object e outro do tipo ElapsedEventArgs. No caso, veja o exemplo abaixo:
Código:
public void MoveSprite(object source, ElapsedEventArgs e)
{
}
Note os parâmetros dentro da função.
Após ter criado a função, o que nós precisamos fazer é adicionar a mesma na lista de Funções que serão chamadas quando o Intervalo for atingido (mais de uma função pode ser chamada). Fazemos isto com a seguinte linha:
Código:
timerMoveSprite.Elapsed += new ElapsedEventHandler(MoveSprite);
Note que o nome passado como Parâmetro deve ser o mesmo nome da nossa função. No caso, criamos uma função chamada MoveSprite, então precisamos passar isto como parâmetro do jeito que mostra o código acima.
#6 Passo - Ativando o Timer
O último e um dos mais importântes passos é este. Felizmente, o mesmo é muito simples! Podemos simplesmente definir a propriedade Enabled como sendo igual à true ou chamar a função Start(); do nosso Timer. Veja o código abaixo:
Código:
timerMoveSprite.Enabled = true; // Ativa o Timer
timerMoveSprite.Start(); // Também ativa o Timer
Código Completo
Digite no topo o seguinte código:
Código:
using System.Timers;
Agora, no topo da classe você deve criar uma váriavel do tipo Timer:
Código:
Timer timerMoveSprite;
Você pode alterar o nome da váriavel se desejar…
Agora, você deve criar a função que será chamada. Ela deverá aceitar dois parâmetros, como mostra o código abaixo:
Código:
public void MoveSprite(object source, ElapsedEventArgs e)
{
// Código a ser executado quando o intervalo for atingido
}
Agora, dentro do Construtor ou de alguma função você deve inicializar o Timer e definir suas propriedade e ativar o mesmo, como mostra o código abaixo:
Código:
timerMoveSprite = new Timer(); // Inicializa
timerMoveSprite.Interval = 2000; // Define Intervalo em Milisegundos
timerMoveSprite.Elapsed += new ElapsedEventHandler(MoveSprite); // Adiciona a função que criamos na lista de funções a serem chamadas quando o intervalo for atingido
timerMoveSprite.Start(); // Ativa o Timer (faz o mesmo começar a contagem)
E prontinho! Você já sabe utilizar Timers com o C#!
Conclusão
Espero que tenha gostado do tutorial. Agora com este conhecimento você pode fazer uma arma de um inimigo disparar a cada X segundos, recalcular um valor após X segundos e outras infinitas possibilidades.
Se gostou do tutorial e quer ver mais destes aqui, não deixe de contribuir com o site, adquira já sua Conta Premium devTuts! Além de ajudar o site, você terá acesso aos melhores conteúdos e ainda terá diversas vantagens, confira!
Obrigado por acompanhar. Dúvidas, Sugestões, Agradecimentos são apreciados! Aguardo seu comentário!
Creditos:Devtuts