El método collidepoint() en Pygame

Maxim Maeder 15 febrero 2024
El método collidepoint() en Pygame

Este artículo muestra cómo dibujar texto en Python usando Pygame. Este no es el código completo para una ventana de juego de Python que funcione.

Si está interesado en un marco de trabajo básico, consulte este artículo.

Usa el método collidepoint() en Pygame

En el método collidepoint() de la clase rect, probamos si un punto dado está dentro del rect. A continuación, haremos un botón que cambie de color al pasar el cursor sobre él.

Puede proporcionar a la función las coordenadas x e y por separado o proporcionarlas en forma iterable, como una tupla o una lista.

Sintaxis:

rect.collidepoint(x, y)
rect.collidepoint((x, y))

Ahora usamos collidepoint() para cambiar el color de una superficie cuando nos desplazamos sobre ella. Hacemos lo siguiente para configurar esto.

  1. Comienza definiendo un rect usando el método collidepoint().
  2. Continúe creando una superficie con el ancho y la altura rect especificados.
  3. Lo último que haremos antes del ciclo principal será crear dos variables. Uno representa el color normal y el otro el color flotante.
# Before Main loop
rect = pygame.Rect(10, 10, 100, 60)
btn_surface = pygame.Surface((rect.width, rect.height))

normal_color = (200, 100, 100)
hover_color = (100, 200, 100)

Obtenemos la posición del mouse en el bucle principal y verificamos si está dentro del rect.

  1. Obtenemos la posición del mouse y la pasamos al método collidepoint() del rect que hicimos arriba.
  2. Si el mouse resulta estar en la parte superior, llenamos la superficie del botón con nuestro color de desplazamiento. En todos los demás casos, lo rellenamos con el color normal.
  3. Por último, sellamos la superficie sobre la pantalla.
# In the Main loop
if rect.collidepoint(pygame.mouse.get_pos()):
    btn_surface.fill(hover_color)
else:
    btn_surface.fill(normal_color)

screen.blit(btn_surface, rect)

Código completo:

# Imports
import sys
import pygame

# Configuration
pygame.init()
fps = 60
fpsClock = pygame.time.Clock()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))

# Before Main loop
rect = pygame.Rect(10, 10, 100, 60)
print(rect.width)
btn_surface = pygame.Surface((rect.width, rect.height))

normal_color = (200, 100, 100)
hover_color = (100, 200, 100)

# Game loop.
while True:
    screen.fill((20, 20, 20))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # In the Main loop
    if rect.collidepoint(pygame.mouse.get_pos()):
        btn_surface.fill(hover_color)
    else:
        btn_surface.fill(normal_color)

    screen.blit(btn_surface, rect)

    pygame.display.flip()
    fpsClock.tick(fps)

Producción:

Usar el método collidepoint() en Pygame

Maxim Maeder avatar Maxim Maeder avatar

Hi, my name is Maxim Maeder, I am a young programming enthusiast looking to have fun coding and teaching you some things about programming.

GitHub

Artículo relacionado - Pygame Function