Os timers, ou temporizadores funcionam basicamente como se fossem cronômetros com um tempo definido. A cada intervalor deste tempo, eles disparam um evento. Então podemos utilizar este evento para realizar qualquer tarefa desejada no programa.
Neste exemplo, a janela fica mudando de cor ao longo do tempo, começando no preto, então oscilando os tons de vermelho, então de volta ao preto. Após, o mesmo é feito para o verde, e por fim com a cor azul. e assim o processo se repete.
Na linha 5 criamos a constante FPS que será usada para definir o tempo do timer.
Na linha 12 declaramos a variável do tipo ALLEGRO_TIMER, que serve para definir um temporizador, usado para disparar um evento a cada intervalo de tempo.
Na linha 27 chamamos a função al_create_timer() que inicializa o timer. Ela recebe por parâmetro o tempo, em segundos, que será o intervalo de tempo que o timer irá disparar. Este disparo, também chamado de tick, será detectado por um evento. Um timer, quando criado, inicia desativado.
Na linha 52 chamamos a função al_register_event_source() para registrar uma fonte de eventos na fila_eventos. A fonte de eventos passada por parâmetro é a fonte de eventos do timer, retornada pela função al_get_timer_event_source().
Na linha 56 chamamos a função al_start_timer(), que serve ativar o timer. A cada tick, ele irá gerar um evento, que poderá ser tratado pelo programa.
83-92
98-103
Na linha 63 criamos a flag desenha. Ela será usada para verificar quando houve um evento de disparo do timer. A cada iteração do loop, o valor desta variável é verificado (linha 98). Se ela estiver em 0, a tela não será atualizada. Quando o evento disparar (linha 83), a flag receberá desenha=1 (linha 91).
Na linha 67 criamos o vetor cor[3]. Cada posição do vetor irá receber um valor, que representará as componentes RPG que resultará na cor que será usada para preencher o fundo da janela na linha 99.
Na linha 70 criamos as variáveis i e inc. A primeira servirá para saber qual posição do vetor cor será acessado dentro do if da linha 83. A segunda variável irá determinar se a cor deverá ao longo do tempo ficando mais clara ou mais escura. Na linha 84 o vetor irá acumular o valor +1 ou -1, dependendo do valor de inc (modificado nas linhas 86 e 89).
Na linha 83 verificamos se o tipo do evento é ALLEGRO_EVENT_TIMER, que é o evento disparado por um temporizador.
Em caso afirmativo, na linha 84 somamos +1 ou -1 ao vetor cor. Nas linhas 85 e 87 verificamos se o vetor na posição analisada chegou ao seus limites, ou seja, 0 ou 255 (pois são os lmites de representação de cada componente RGB). Em caso afirmativo, invertemos o sinal da variável inc(linhas 86 e 89).
Na linha 88, incrementamos a variável i, porém aplicando o resto da divisão por 3, fazendo com que os valores da variável vão de 0 até 2, posi a variável irá acessar as posições do vetor.
Os valores do vetor vão variar da seguinte maneira:
Na linha 98 testamos se a flag desenha!=0 e também não há mais eventos esperando na fila. Em caso aformativo, atualizamos a tela, mostrando a cor determinada pelo vetor cor. Então à variável desenha=0. Isto evitará que a cada iteração do loop principal, a tela seja mostrada, fazendo com que isto aconteça somente quando o evento do timer for disparado, o que acontece 60 vezes por segundo.