quarta-feira, 10 de abril de 2019

Pygame: Colisão entre objetos - Parte: 02

Conforme o post anterior (https://vemfazermatematicaegames.blogspot.com/2019/04/pygame-colisao-entre-objetos-parte-01.html) iniciamos uma programação para colisão de dois personagens. Entendemos como funciona a programação que utiliza os conceitos de distância entre dois círculos (Geometria Analítica), mas agora iremos entender como é realizado esse cálculo com um personagem que se movimenta pela tela.
Primeiramente observe a programação destacada abaixo:



Como podemos ver, temos a construção das variáveis "xmario" e "ymario"como a soma da posição em X e Y respectivamente mais o valor do raio (lembre que na distância foi utilizado uma "média para os valores de 45 e 65 com o valor de 50 e, isso ocorre por conta de uma circunferência que envolve o Mário que é uma forma mais elipsoide). Também temos a definição do "xcogumelo" e "ycogumelo" para a soma de valores de posição do cogumelo (500, 300) mais o valor de raio 128 (note que nesse caso não foi diferenciado valores para X e Y pois a própria forma do cogumelo se assemelha a uma circunferência).


Com o calculo da distância vamos comparar ponto a ponto os X e Y do Mário em relação ao Cogumelo e os casos que foram apresentados no post anterior serão verificados pela definição "colisão" (que nada mais é do que o cálculo de distância entre pontos quando ela fica menor do que 128 + 50):



Perceba que foi usado um "if" (se) para o caso em que existe colisão dos personagens (circunferências) em que se for exatamente em apenas um ponto (tangência entre as duas circunferências) irá ser desenhada na tela a posição atual do personagem, caso contrário (else ou senão), onde temos o personagem avançando mais do que deveria dentro do outro personagem (circunferências secantes ou mesmo internas) irá ser desenhado a posição do personagem anterior. Esse último acaba acontecendo pois como em X e Y nos movimentamos com valores de 5 em 5, a chance de termos uma tangência entre personagens (circunferências) é pequena e isso acaba dando a ilusão de que o personagem está batendo no outro, sem nunca avançar mais do que deveria.
Incrível o uso de toda essa Matemática só para descrever a colisão entre dois personagens, não é mesmo? Que tal adicionar umas ações para quando os personagens se colidem, ou até mesmo criar um game em que os dois personagens se movimentam pela tela e que o objetivo é um caçar o outro como se fosse um polícia e ladrão (que tal ser multiplayer)? Agora é com você e está nas suas mãos em ir ainda mais longe. Até a próxima!

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çõ...