Saltar la navegación

5.1. Detección de colisiones entre rectángulos

Método básico: colliderect()

Cuando queremos detectar si dos objetos en un juego han chocado o se han superpuesto, una manera sencilla de hacerlo es usando rectángulos. En Pygame, cada objeto puede tener un rectángulo que lo rodee, llamado "rectángulo envolvente" (o bounding box en inglés). Aunque el objeto no tenga una forma cuadrada o rectangular, podemos imaginarlo dentro de este rectángulo.

Detectar si dos rectángulos se tocan es muy fácil en Pygame, ya que la biblioteca tiene funciones que se encargan de eso por nosotros. La forma más común de hacerlo es usando la función colliderect(). Esta función compara dos rectángulos y nos dice si se están tocando o no.

Imagina, por ejemplo, que tienes un jugador y un enemigo en un juego. Ambos pueden estar dentro de un rectángulo. Cada vez que el juego se actualiza, puedes comprobar si los rectángulos de ambos se están tocando para saber si ha habido una colisión. Si la colisión ocurre, podrías hacer que el jugador pierda puntos de vida o que aparezca un efecto de explosión.

Ejemplo básico de detección de colisiones entre rectángulos:


import pygame

# Inicializar Pygame
pygame.init()

# Crear una ventana de 800x600 píxeles
pantalla = pygame.display.set_mode((800, 600))

# Definir colores (rojo para los objetos)
BLANCO = (255, 255, 255)
ROJO = (255, 0, 0)

# Crear dos rectángulos que representarán a nuestros objetos
rect1 = pygame.Rect(100, 100, 50, 50)  # x, y, ancho, alto
rect2 = pygame.Rect(150, 150, 50, 50)

# Bucle del juego
corriendo = True
while corriendo:
    for evento in pygame.event.get():
        if evento.type == pygame.QUIT:
            corriendo = False
    
    # Limpiar la pantalla con color blanco
    pantalla.fill(BLANCO)
    
    # Dibujar los rectángulos en la pantalla
    pygame.draw.rect(pantalla, ROJO, rect1)
    pygame.draw.rect(pantalla, ROJO, rect2)
    
    # Detectar si los dos rectángulos se están tocando
    if rect1.colliderect(rect2):
        print("¡Colisión detectada!")
    
    # Actualizar la pantalla para mostrar los cambios
    pygame.display.flip()

# Salir de Pygame
pygame.quit()

En este ejemplo, hemos creado dos rectángulos rojos en la pantalla. Usamos colliderect() para verificar si los rectángulos se superponen. Cuando esto sucede, el juego muestra un mensaje en la consola que dice "¡Colisión detectada!".

Este método es muy útil porque es rápido y fácil de implementar, pero hay que tener en cuenta que puede no ser exacto cuando los objetos no tienen forma rectangular, ya que el rectángulo que rodea a los objetos podría detectar una colisión incluso cuando las partes visibles del objeto no se toquen.

colliderect()

Pregunta

¿Cómo funciona el método colliderect() en Pygame?

Respuestas

Compara dos imágenes y las combina.

Verifica mediante condicional if si dos rectángulos se están tocando.

Mueve mediante un bucle el objeto por la pantalla

Retroalimentación

Pregunta

¿Qué tipo de valor devuelve colliderect() en Pygame?

Respuestas

Un número indicando la distancia entre los rectángulos

Un valor de texto con el nombre del rectángulo que ha colisionado.

Un valor booleano (True o False).

Retroalimentación

Licencia: licencia propietaria intelectual

Creado con eXeLearning (Ventana nueva)