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 sonoros21.
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
eD
; - 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.
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.
É possível incluir sons usando as funções de áudio da SDL, mas neste curso não utilizaremos tais funcionalidades.↩︎