Timer no Allegro

Tem muita coisa na internet sobre Timers no Allegro, a maioria ensina a mesma coisa, mas como a quantidade de perguntas nos fóruns sobre isso também é grande, eu resolvi postar aqui como uma referência, assim fica mais fácil pra postar o link! hehehe

Vamos lá então!

Timer (temporizador) é uma coisa de suma importância num jogo. Com ele você pode pegar e limitar o FPS (quadros por segundo) de um jogo, pode fazer missões com tempo, pode pegar o tempo que o jogador demorou para salvar o seu jogo, pode fazer contagens regressivas e milhares de outras coisas, a limitação é sua criatividade.

E com Allegro é bem simples criar um temporizador, com algumas linhas você já tem um timer! Nós vamos desenvolver o timer em C. Depois eu posto uma classe de Timer Pra C++ que eu fiz.

Em primeiro lugar, nós chamamos a função install_timer(); na inicialização do programa, depois criamos uma variável global e volatile, assim:

 volatile int count; // Variável Global 

Essa variável vai ser incrementada a cada intervalo de tempo definido pelo nosso timer. Agora agente cria uma função que incrementa essa variável, pois o nosso timer funciona com callbacks, ou seja, ele chama uma função a cada intervalo de tempo, e como nós queremos que essa variável seja incrementada nesse intervalo, apenas definimos a função para incrementá-la.

void Conta()
{
   count++;
}
END_OF_FUNCTION(Conta);

LOCK_FUNCTION(Conta);
LOCK_VARIABLE(count);

Você pode ver algo de estranho aqui, essas três macros. Sim, elas são necessárias para não ter problemas com a memória, nunca se esqueça de colocá-las! =D

Agora nós criamos o nosso timer própriamente dito, é a função install_int_ex que instala um Thread (processo independente) a cada intervalo de tempo.

install_int_ex(Conta, SECS_TO_TIMER(1));

Como você pode ver, ele aceita dois parâmetros. O primeiro é a função a ser chamada, o outro é o intervalo de tempo, e que através da Macro SECS_TO_TIMER ele define para um segundo. Você pode usar outras macros, com a MSEC_TO_TIMER, que aceita milisegundos, tem outras também, veja o manual do Allegro.

Agora então você pode, por exemplo, mostrar na tela quantos segundos fazem que o usuário abriu o programa, assim:

textprintf_ex(buffer, font, 10, 10, 0xFFFFFF, -1, "Segundos: %i", count);

E não se esqueça de, no final do programa ou quando precisar parar o timer, chamar a função:

remove_int(Conta);

Pronto! Aí está o nosso timer simples! =D

Depois eu vou postar aqui uma classe que eu fiz de timer para C++, ficou muito simples de usá-la!

Até!

5 Respostas

  1. O teu esforço é provável que ajuda muita gente lá na Unidev, seria interessante se você fixasse um tópico com esta tua entrada.
    Sobre eliminar os timers no final do programa, o Allegro elimina pra você, não é preciso usar remove_int.

  2. Sim, ele remove, mas eu acho uma boa prática de programação removê-lo, por que assim você tem mais controle (frescura ^^), e foi também com intenção de dizer que você pode removê-lo e readicioná-lo normalmente! =D

    Vlwww aee pelo comentário! xD

  3. […] de Timer para Allegro Como eu disse no artigo de Timer no Allegro, eu vou postar uma classe que eu fiz para auxiliar o trabalho com […]

  4. Daeeew Croci!
    Muito útil esse tutorial, acabei de usar ele pra fazer um esqueminha aqui hehe ^^… eu tenho uma dúvida quanto ao LOCK_VARIABLE(var), ele é obrigado usar?… é que na função que to usando, ela não tem nenhuma variável contadora, a função só reseta algumas coisas no jogo… olha só:

    if( nViradas == 2 ){
    LOCK_FUNCTION(resetaVirou);
    install_int_ex(resetaVirou, SECS_TO_TIMER(2));
    }

    e dentro da função resetaVirou eu uso o remove_int(resetaVirou); …

    Falow

  5. Ah, você instala o timer para uma função que executa algumas funções e então se “auto-destroi”?

    Bom, nesse caso acho que não é necessário o uso da macro, por que você não está usando uma variável! =D

    Flw

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: