segunda-feira, 8 de abril de 2019

Pygame: Colisão entre objetos - Parte: 01

No post anterior (https://vemfazermatematicaegames.blogspot.com/2019/04/pygames-criando-um-cenario-e.html) construímos uma programação usando a biblioteca do Pygames para o personagem Mário pudesse andar livremente pelo cenário a partir das setas direcionais do teclado. Mas e se o Mário colidisse com algum outro objeto do cenário? Como programar essa situação? É isso que veremos hoje. Utilize o arquivo Python e as figuras do seguinte link para os testes: https://drive.google.com/drive/folders/1g7vPehglS7ZExeW2it7xTbu7itHM-Fl7?usp=sharing. Veja o seguinte recorte do código:



Basicamente precisamos de algo na programação para detectar a colisão dentre dois objetos. A saída mais elegante e matemática é usando a noção de distância entre dois círculos com uso da Geometria Analítica (que está descrita em partes no código acima). Você deve estar se perguntando, porque dois círculos? A resposta é que estamos fazendo uma aproximação das duas imagens que irão sofrer colisão (o Mário e o Toad(cogumelo)) e se tivéssemos de construir matematicamente uma poligonal que acompanhassem o desenho desses dois personagens, seria um desafio ainda maior, por isso, por hora, vamos nos ater a duas circunferências.
Imagine uma circunferência A com raio de 50 e uma circunferência B com o raio de 128 circunscrevendo o Mário e o Cogumelo respectivamente. Sempre que usarmos a fórmula de distância entre pontos a partir do centro dessas circunferências com a comparação dos seus valores de raios (50 + 128), teremos as posições relativas dessas circunferências e consequentemente a posição de cada um dos personagens:

  • Caso o valor da distância seja maior do que 50 + 128 significa que não existe nenhum ponto de contato entre ambos os personagens (circunferências), portanto não existe colisão.
  • Caso o valor da distância seja igual a 50 + 128 significa que existe um ponto de contato entre ambos os personagens (circunferências), portanto temos colisão (pense como se tivessem se raspando).

  • Caso o valor da distância seja menor do que 50 + 128 significa que existe mais do que um ponto de contato entre ambos os personagens (circunferências), portanto temos uma grande colisão.

E para o nosso game queremos o caso que tenha colisão, portanto na programação usando o if (se) daremos ênfase ao caso em que a distância é menor do que 50+128 (pode considerar o valor de tangência também, caso queira) e obviamente, já definida como se calcula a distância entre pontos via Geometria Analítica. Teoricamente é isso que está embutido no código acima. No próximo post iremos falar da implementação desses conceitos com um dos personagens se movimentando no plano (Mario) e o outro parado (Cogumelo). Até a próxima!

Nenhum comentário:

Postar um comentário

Como não perder nenhum compromisso: Meu App Agenda

No nosso dia a dia a agenda é um instrumento de grande importância que as pessoas utilizam para fazer anotações de compromissos ou informaçõ...