5 Desenvolvendo um jogo 2D

Neste capítulo, usaremos o pipeline gráfico do OpenGL e funções das bibliotecas auxiliares da ABCg (GLM, ImGui, SDL) para desenvolver um jogo com gráficos 2D. Veremos como especificar a geometria de objetos de cena usando diferentes formatos de Vertex Buffer Objects (VBOs), como trabalhar com mais de um par de vertex/fragment shaders, e como usar variáveis uniformes (uniform variables) para modificar a cor, posição e orientação dos objetos sem precisar reconstruir os VBOs. Também trabalharemos com aspectos não relacionados ao pipeline, mas que são necessários para dar animação e interação ao jogo:

  • Como responder a eventos do mouse e teclado;
  • Como calcular a colisão entre os objetos do jogo;
  • Como usar temporizadores para animar os objetos.

O resultado será um jogo estilo Asteroids, como mostrado a seguir. Para simplificar, o jogo não terá efeitos sonoros22.

A nave pode ser controlada pelo teclado ou mouse:

  • A orientação é ajustada pela posição do mouse, setas para os lados ou teclas A e D;
  • A aceleração é ativada com o botão direito do mouse, seta para cima ou tecla W;
  • Os tiros são disparados com o botão esquerdo do mouse ou barra de espaço.
Observação

Como a página do jogo está embutida neste livro online, só é possível controlar a nave pelo mouse. Para a aplicação ter o foco do teclado, abra o link original.

Antes de começar a desenvolver o jogo, acompanharemos na seção 5.1 o passo a passo de desenvolvimento de um projeto mais simples, que desenha polígonos regulares coloridos em posições aleatórias da janela. O projeto explora conceitos que serão aplicados no jogo. Em particular, os polígonos regulares servirão de base para criarmos os asteroides e os tiros da espaçonave. Também usaremos temporizadores e variáveis uniformes de forma muito parecida com o que veremos nesse primeiro projeto.


  1. É possível incluir sons usando as funções de áudio da SDL, mas neste curso não utilizaremos tais funcionalidades.↩︎