[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