• Jogos
  • 06. Colisões

Colisões

Colisão entre formas geométricas

Como quase nenhum objeto de um jogo é um ponto, precisamos de algo que nos permita representar mais situações. Uma das maneiras mais simples é a colisão entre círculos. Mude o tamanho e posição dos círculos abaixo para verificar a condição de colisão.

Exercício 1

Qual condição deve ser utilizada para verificar se dois círculos estão colidindo? Assuma que você tem as seguintes variáveis:

cx1  # Coordenada x do círculo 1
cy1  # Coordenada y do círculo 1
raio1  # Raio do círculo 1
cx2  # Coordenada x do círculo 2
cy2  # Coordenada y do círculo 2
raio2  # Raio do círculo 2

Resposta

A condição deve ser:

distancia_centros = ((cx1 - cx2)**2 + (cy1 - cy2)**2)**0.5
if distancia_centros <= raio1 + raio2:
    print('Círculos colidiram')
else:
    print('Círculos não colidiram')

A colisão entre retângulos é bastante rápida e também funciona bem em muitos casos. Mude os tamanhos e posições dos retângulos para verificar a condição de colisão.

Exercício 2

Qual condição deve ser utilizada para verificar se dois retângulos estão colidindo? Assuma que você tem as seguintes variáveis:

x1  # Coordenada x do lado esquerdo do retângulo 1
y1  # Coordenada y do lado superior do retângulo 1 (assumindo as coordenadas do Pygame, com o y aumentando para baixo)
largura1  # Largura do retângulo 1
altura1  # Altura do retângulo 1
x2  # Coordenada x do lado esquerdo do retângulo 2
y2  # Coordenada y do lado superior do retângulo 2 (assumindo as coordenadas do Pygame, com o y aumentando para baixo)
largura2  # Largura do retângulo 2
altura2  # Altura do retângulo 2

Este tipo de colisão abrange vários casos. Mova os retângulos acima para verificar se cobriu todos os casos possíveis. Se não descobrir, veja a resposta deste exercício (escrevendo qualquer resposta) e verifique a condição para casos diferentes na imagem acima.

Resposta

A condição deve ser:

if (
    x1 < x2 + largura2 and
    x1 + largura1 > x2 and
    y1 < y2 + altura2 and
    altura1 + y1 > y2
):
    print('Retângulos colidiram')
else:
    print('Retângulos não colidiram')

Exercício 3

Resolva o exercício Colisões entre retângulos.

Acessar exercício

Na verdade, o próprio Pygame já tem funções prontas que verificam colisões entre essas formas geométricas simples. Veremos como usá-las na próxima página.