2D Game Framework – Collision detection demonstration

Olá,

Vim compartilhar um projeto em andamento: um framework para jogos 2D construído em C# e SFML (Simple and Fast Multimedia Library). A intenção é criar à partir do zero coisas que game engines fazem por nós, como animação de sprites e detecção de colisões.

Mas pra quê? Bom, se você quer entender como desenvolver games, reinventar a roda às vezes é preciso. Isso lhe garante uma base mais sólida sobre algoritmos específicos de games,  proporciona a chance de treinar seus conhecimentos, além de ser divertido (ok, também é frustrante quando nada dá certo).

Esse projeto parte da utilização da SFML para gerenciamento de janela, áudio, texturas e eventos de input, e todo o restante é implementado sobre isso. Essa é uma demonstração do protótipo para detecção de colisões:

2017-02-07-2
Circle x Box
2017-02-07-3
Circle x Circle
2017-02-07-4
Circle x Oriented Box
2017-02-07-5
Box x Oriented Box
2017-02-07-6
Oriented Box x Oriented Box

 

 

Assista aqui o projeto em funcionamento.

O grande desafio aqui é criar uma estrutura que possa ser expansível sem que as expansões gerem impacto (ou pelo menos gerem apenas pouco impacto) sobre o que já existe em funcionamento.  Para isso, estou implementando uma arquitetura baseada em componentes, similar a Unity. Um objeto agrega ou descarta os componentes que forem úteis ou inúteis para ele, assim como um personagem coleta um power up no cenário e adquire um super poder, ou perde um super poder ao sofrer dano. Desta forma, coisas como Mover, Pular, Voar, Atirar, Defender, Animar podem ser abstraídas em forma de componentes lógicos individuais, e um objeto do jogo agrega somente aqueles que são necessários para construir seu comportamento: um inimigo que não precisa andar não possui o componente Mover!

Outro ponto interessante é construir o Framework de forma independente da aplicação. O framework é um modelo, e como modelo, apenas provê um esqueleto para ser utilizado. Quem usa o esqueleto e o preenche da forma como precisa é a Aplicação. Cada Aplicação possui uma necessidade diferente: um jogo de plataforma é diferente de um jogo de corrida, embora ambos possam usar as mesmas regras de colisão entre Box, Circle e OrientedBox. O que eles devem fazer na prática é “enfeitar” o esqueleto com seu contexto de Plataforma ou Corrida, personalizando os sprites, sons e as regras de vitória e derrota (em corrida seria chegar em primeiro, em plataforma seria terminar o level antes que o tempo acabe).

Por enquanto é isso, futuramente publico novas atualizações!

Comente!

Resposta