Академический Документы
Профессиональный Документы
Культура Документы
id=16
Controle de Tempo
Todas as linguagens de programao tem acesso a algum componente ou controle de tempo. No windows, desde que a janela aberta, o sistema operacional comea a contar o tempo que ela esta aberta em clocks de mquina. Poder usar esses componentes de tempo muito importante em qualquer jogo. Eles servem para fazer animaes, controlar o tempo de jogabilidade ou mesmo o tempo de alguma fase.
DICA...
As rotinas de tempo so utilizadas para substituir as paradas de cdigo "comando rest()" ou os gotos do basic. Por isso no muito aconselhvel utilizar o comando rest() em seu jogos.
install_timer Esta funo precisa ser chamada no nicio do programa para que seja habilitado a utilizao de timers do allegro. Funciona assim como o install_keyboard().
remove_timer Remove todo e qualquer controle de tempo. Esta funo chamada automaticamente no final do programa pelo comando allegro_exit();
install_int Esta a nossa funo chave, esta funo serve para instalar um timer handler. Ela possu dois parmetros: int install_int(void (*proc)(), int speed); O primeiro um ponteiro para uma funo. No primeiro parametros voc precisa informar o nome de uma funo que uma funo que retorna um void sem parametros que ser executada vrias vezes no tempo determinado pelo segundo parametro. E o segundo a velocidade do contador de tempo em milisegundos, onde 1 segundo igual a 1000 milisegundos.
1 de 5
14/11/2008 14:41
http://www.bdjogos.com/biblioteca_conteudo.php?id=16
Imagine um Handler como um ponteiro, s que ele no aponta para um endereo de memria e sim para um servio ( que pode ser um servio de seu programa, de outro programa ou do sistema operacional ).
CDIGO...
#include <allegro.h> int vcontador; // prototipo void contador(); int main() { allegro_init(); set_color_depth(16); install_keyboard(); set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0); install_timer(); install_int( contador, 5000 );
int vcontador = 0; // Lao principal while( !key[KEY_ESC] ) { vcontador = ::vcontador; clear( screen ); textprintf_ex( screen, font, 10, 10, makecol(255,0,0), -1, "Variavel Contador: %d", vcontador ); vsync(); }
FIM DO CDIGO
2 de 5
14/11/2008 14:41
http://www.bdjogos.com/biblioteca_conteudo.php?id=16
install_int_ex Esta uma funo modificadora da funo original. Ela aceita parametros personalizados e tambm tem sua velocidade controlada pelo hardware( clock ticks ).
O Allegro nos deixa converter o formato de hardware com a ajuda dos seguintes macros, que podem ser utilizadas como o segundo parametro: SECS_TO_TIMER(secs) - Pega o nmero em segundos entre cada clock tick MSEC_TO_TIMER(msec) - Pega o nmero em milisegundos entre cada clock tick. Usar este parametro deixa a funo install_int_ex igual a funo install_int. BPS_TO_TIMER(bps) - Pega o nmero de clock tick a cada segundo BPM_TO_TIMER(bpm) - Pega o nmero de clock tick a cada minuto Exemplo: // a cada 10 segundos install_int_ex( funcao1, SECS_TO_TIMER(10) ); // a cada 10 segundos ( 10000 milisegundos ) install_int_ex( funcao1, MSEC_TO_TIMER(10000) ); // a cada 1000 clock tick por segundo install_int_ex( funcao1, BPS_TO_TIMER(1000) ); // a cada 100000 clock tick por minuto install_int_ex( funcao1, BPM_TO_TIMER(100000) );
remove_int Esta funo remove um handler regitrado para a funo enviada por parametro. Exemplo : install_int_ex( funcao1, SECS_TO_TIMER(10) ); // cria contador remove_int( funcao1 ); // remove o contador que executava a funcao1
3 de 5
14/11/2008 14:41
http://www.bdjogos.com/biblioteca_conteudo.php?id=16
install_param_int e install_param_int_ex O prototipo da funo assusta: int install_param_int(void (*proc)(void *), void *param, int speed); a mesma coisa que o install_int porm, com uma grande diferena de que voc pode passar um parametro para essa funo. ( E usar os modificadores no install_param_int_ex ). Como esse parametro um void, voc poder passar qualquer tipo, fazendo a converso antes e depois para poder usar os tipos. Essa funo um pouco complexa, por isso vou dar um exemplo completo da utilizao. Exemplo : No exemplo abaixo, instalamos um timer que incrementa um contador a cada 5 segundos. Quando este contador chegar a 5, fizemos com que o timer seja desligado.
CDIGO...
#include <allegro.h> #include <iostream> int vcontador; // prototipo void contador( void * ); int main() { allegro_init(); set_color_depth(16); install_keyboard(); set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0); install_timer(); int total = 5; install_param_int( contador, (void *)&total, 5000 );
int vcontador = 0; // Lao principal while( !key[KEY_ESC] ) { vcontador = ::vcontador; clear( screen ); textprintf_ex( screen, font, 10, 10, makecol(255,0,0), -1, "Variavel Contador: %d", vcontador ); vsync(); }
allegro_exit(); return 0; } END_OF_MAIN(); void contador( void *b) { ::vcontador++; int *c = (int *)b; int a = (*c); if ( ::vcontador == a ) { remove_param_int( contador, (void *)b ); } }
FIM DO CDIGO
remove_param_int
4 de 5
14/11/2008 14:41
http://www.bdjogos.com/biblioteca_conteudo.php?id=16
Esta funo remove um handler regitrado para a funo enviada por parametro. Exemplo : install_param_int( contador, (void *)&total, 5000 ); // cria contador remove_param_int( contador, (void *)b ); // remove o contador que executava a contador
rest Esta funo faz com que o programa espere pelo tempo especificado no parametro. void rest(unsigned int time); Exemplo : rest( 5000 ); // espera 5 segundos
rest_callback Esta funo faz com que o programa espere pelo tempo especificado no parametro, durante a espera, ela executa a funo enviada no segundo parametro. void rest_callback(long time, void (*callback)()) A funo enviada tem que ser void e nao pode ter parametros. Exemplo : rest_callback( 10000, pause ); // espera 10 segundos e enquanto isso executa a funo pause
Contribuidor Adriano Waltrick 14/08/2007 Voltar 01/06/2007 (C) Copyright. Todos os Direitos Reservados. Leia a poltica de privacidade do portal. proibida a cpia de contedo deste site de acordo com a Lei Brasileira de Direitos Autorais.
5 de 5
14/11/2008 14:41