Oct 3rd 2007, 00:21
Explicações sobre o game loop - parte 2.
Conforme prometido, vamos começar a partir do básico o ensino dos conceitos. O “Game Loop” (Laço do jogo) é o principal deles.
Atenção: depois de entender o conceito do Game Loop, você poderá programar pequenas “animações”, terá uma noção geral de como se estrutura um jogo e principalmente terá um pouco de experiência. Mais tarde com esse conceito “dominado”, se você aprender um pouco de detecção de colisão e como pegar a entrada do jogador já poderá fazer jogos simples.
O foco deste artigo será no desenvolvimento de um Game Loop utilizando a linguagem C e a biblioteca Allegro. Não ensinarei como você poderá fazer para compilar o código fonte e nem instalar o ambiente (veja no final do artigo a seção de Referência para maiores detalhes).
Para estudar este artigo eu recomendo:
- digitar os códigos fontes (ao invés de apenas ler e colar);
- ler com calma e ir praticando (isso não fará sentido em um ou dois dias, você não pegará de imediato e conforme for experimentando (essencial) aprenderá muito mais do que o artigo ensinou);
- se possível imprima o conteúdo para poder ir lendo e digitando.
O Game Loop é o coração de um jogo, nele se encontra a organização do fluxo que permite um jogo continuar rodando baseado nas condições em que foi programado & exposto. Para entender o Game Loop é necessário primeiro entender um outro conceito básico em programação de computadores:
Onde:
- ENTRADA: constitui a parte em que o sistema recebe os dados do ambiente
- PROCESSAMENTO: parte em que baseado nos dados que o sistema possui, ele irá processá-los
- SAÍDA: parte em que após o processamento for concluído, o sistema emitirá uma saída com os resultados.
Simples? Sim, na teoria. Este conceito básico nos ajuda a visualizar o Game Loop que nada mais é do que este ciclo executando indefinidamente com uma diferença fundalmental: o ciclo continua executando mesmo que não haja uma entrada no sistema. Conseguiu visualizar? Esta diferença fundamental entre um jogo e um aplicativo convencional nos permite fazer a interatividade de um jogo.
Em um Game Loop temos:
- ENTRADA: aqui temos a parte responsável por pegar todos os dados que o jogador envia via teclado, mouse, sensor ótico, tela touch-screen, etc. Aqui também temos que levar em consideração as limitações do dispositivo de entrada (se houver), tempo de leitura das informações, repetições, etc…
- PROCESSAMENTO: aqui temos todo o processamento da lógica do jogo: detecção de colisão, física, carregamento de níveis, cálculos diversos, tomada de decisões baseadas na entrada, cálculo de inteligência artificial, leitura de arquivos e uma infinidade de outras coisas.
- SAÍDA: nesta parte (em alguns casos chamada de renderização) temos todas as informações do jogo exibidos na tela, gravados em um arquivo, etc. Esta área é extremamente extensa e rica (John Carmack que o diga). Podemos ter gráficos 2D, 3D, etc, utilizando APIS gráficas como DirectX, OpenGL, SDL, Allegro… Hoje em dia é comum também a utilização de Shaders para incrementar ainda mais a gama de efeitos de visualização.
Agora que conhecemos como se estrutura um Game Loop, vamos ver na prática como podemos organizar estas informações e testar os nossos próprios conceitos.
O nosso Game Loop se dividirá em duas partes (além das partes descritas acima):
- uma parte responsável pela execução da lógica do jogo (o processamento deve ser totalmente executado antes de haver uma saída)
- uma parte responsável pela saída dos gráficos na tela (no nosso caso utilizaremos uma técnica chamada “Double Buffering”)
Além das partes citadas acima o nosso Game Loop também conterá:
- um contador simples de FPS
- double buffer
Vamos ao código (está comentado detalhadamente):
Após rodar o programa acima, você verá uma tela como a de baixo (observe o contador de fps no canto superior esquerdo):
Conclusão
Em um próximo artigo veremos algumas possiblidades com as funções básicas de renderização de “primitivas” no Allegro e em seguida estudaremos algumas técnicas para entrada, assim já será possível fazer jogos bem simples (mas divertidos).
Fique ligado.
Dicas
- não tente decorar as funções do Allegro, entenda o conceito, você não conseguirá escrever sem olhar no manual (tive que olhar no manual várias vezes para escrever este código)
- agora que você possui a estrutura básica de um Game Loop, estude as funções de desenho “primitivas” da biblioteca Allegro e tente desenhar alguma coisa que se mova (ou que não se mova)
- se você estudar a função “rand” da biblioteca matemática “math.h” poderá incrementar ainda mais estas animações com efeitos aleatórios
- lembre-se de testar e fazer diversos exemplos.
- não se preocupe em entender todos os detalhes do código agora, o importante é entender o conceito e ir testando com cada parte para solidificar na mente, não perca tempo com decoreba de estruturas complicadas da linguagem e nome de funções (que você só lembrará as que mais utilizar, isto é, as que você digitou com mais frequência :)
Referências
- Allegro Vivace: Um dos melhores tutoriais que eu já vi sobre Allegro, se você não viu, veja agora. Em inglês.
- Allegro para Iniciantes: Artigo muito bom do site Unidev que ensina como instalar uma IDE para desenvolvimento em C++ com Allegro e ensina também o básico para desenvolver em Allegro (recomendado, este artigo ensina algumas coisas que ainda não comentei no blog).
- Iniciação de Allegro em C++: Outro artigo, serve como complemento do primeiro.
- BDJogos: Excelente site nacional com diversos tutoriais sobre Allegro. Altamente recomendado.
Espero que tenham gostado. Até o próximo artigo.