Desbravando o pygame 3 - Game Loop
Publicado em
Agora que sabemos como desenhar na tela (postagem anterior) seria interessante que nosso jogo ficasse rodando até que alguém o feche. Para isso vamos utilizar um dos fundamentos do desenvolvimento de jogos que é o Game Loop.
Conceito
Dentro da computação o conceito de ciclo é bastante recorrente, trata-se de uma sequência de ações e tomadas de decisão programadas que se repetem dentro de um laço de repetição (ou loop). No baixo nível temos o processador do computador que trabalha em ciclos de operações aritméticas gerenciadas pelo clock, em sistemas operacionais o ciclo é quem gerencia o tempo de uso do processador, o dividindo entre todas as aplicações do sistema além de verificar se o usuário realizou algum comando, em servidores web usamos um ciclo para verificar se alguém requisitou uma página que será processada e devolvida em forma de resposta. Com jogos não seria diferente.
O ciclo dentro do desenvolvimento de jogos é chamado de Game Loop e é peça fundamental na estrutura de um jogo. De modo simplificado temos a seguinte estrutura:
Durante a execução jogo está sempre:
Recebendo e processando entradas do usuário que são detectados por eventos gerados por dispositivos de entrada como um teclado e um mouse.
Atualizando o jogo de acordo com os eventos processados e de outras mecânicas como aplicação de gravidade, detecção de colisão, eventos programados dentre outros.
Desenhando na tela o resultado de toda a interação anterior.
Diferente de um loop de eventos de uma aplicação de desktop por exemplo em que o programa fica parado até que você tome alguma ação, no loop de jogo continua sua execução independente da entrada do usuário atualizando elementos independentes como, música, física, inteligência artificial, etc.
Um outro ponto importante que não está nos itens acima mas está presente na grande maioria dos jogos é o controle de atualização do loop. Mas este tópico ficará para uma próxima postagem.
Implementação
Para demonstrar o game loop em funcionamento faremos um programa que desenha uma bola que quica pelos cantos da tela:
|
|
É assim, bem direto ao ponto, o loop definido em while True:
irá rodar o código indefinidamente realizando as etapas de processamento de entrada, atualização do jogo e desenho a cada ciclo que passa.
Na etapa de processamento de entrada usamos pygame.event.poll()
para recuperar um evento da fila e checar se ele é um evento de término de programa. Se ele for, usamos break
para sair do loop, finalizando assim o programa.
Durante a etapa de atualização do jogo movemos a nossa bola no eixo x e y verificando se a bola se encontra nas extremidades e alterando sua direção em caso positivo.
E finalmente na etapa de desenho usamos as funções previamente apresentadas para mostrar nossa bola na tela.
Concluindo
E com isso finalizamos nosso breve passeio pelo game loop. Não se esqueça que todo código estará disponível no repositório exploring-pygame.
Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional .