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.
- Comienza definiendo un
rect
usando el métodocollidepoint()
. - Continúe creando una superficie con el ancho y la altura
rect
especificados. - 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
.
- Obtenemos la posición del mouse y la pasamos al método
collidepoint()
delrect
que hicimos arriba. - 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.
- 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:
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