Resaltar al pasar el cursor
Parte de la sección El bucle del juego del Journey de Pygame de Coddy. Lección 15 de 32.
Comprobar gx <= x <= gx + 30 cada vez resulta tedioso. Pygame tiene una clase para rectángulos, pygame.Rect, que mantiene juntas una posición y un tamaño y hace estas comprobaciones por ti:
gem = pygame.Rect(225, 165, 30, 30)
if gem.collidepoint(event.pos):
score += 1gem.collidepoint(point) es True cuando el punto está dentro del Rect. Aún puedes leer y cambiar gem.x y gem.y, y un Rect da nombre a sus propios puntos: gem.midtop, gem.midright, gem.midbottom y gem.midleft son los puntos medios de sus lados, que corresponden a los cuatro puntos de la gema.
La misma comprobación con la posición del puntero te indica que el jugador está apuntando a la gema. Los juegos lo muestran con un resaltado:
if gem.collidepoint(pygame.mouse.get_pos()):
pygame.draw.rect(screen, (255, 196, 0), gem.inflate(10, 10), 2)gem.inflate(10, 10) es un Rect nuevo, 10 píxeles más ancho y más alto, con el mismo centro, así que el contorno queda a 5 píxeles por fuera de la gema.
Desafío
Fácil- Sustituye
gx, gy = 225, 165porgem = pygame.Rect(225, 165, 30, 30)y usagem.xygem.ydonde usabasgxygy. - Dibuja la gema a partir de
[gem.midtop, gem.midright, gem.midbottom, gem.midleft]y comprueba los clics congem.collidepoint(event.pos). - Después de dibujar la gema, cuando el puntero esté sobre ella, dibuja un contorno amarillo
(255, 196, 0)degem.inflate(10, 10), de2píxeles de ancho.
Pruébalo tú mismo
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Hunt")
clock = pygame.time.Clock()
gx, gy = 225, 165
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
if gx <= x <= gx + 30 and gy <= y <= gy + 30:
score += 1
gx = random.randint(15, 435)
gy = random.randint(55, 315)
screen.fill((30, 30, 46))
gem_points = [(gx + 15, gy), (gx + 30, gy + 15), (gx + 15, gy + 30), (gx, gy + 15)]
pygame.draw.polygon(screen, (80, 220, 255), gem_points)
for i in range(score):
pygame.draw.rect(screen, (240, 110, 180), (10 + 10 * i, 14, 8, 8))
mouse_x, mouse_y = pygame.mouse.get_pos()
pygame.draw.circle(screen, (240, 240, 240), (mouse_x, mouse_y), 10, 2)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas las lecciones de El bucle del juego
1Mueve un cuadrado
Abre una ventanaRellena el fondo4Movimiento basado en el tiempo
Tiempo deltaPíxeles por segundoVector2Aceleración y fricciónReaparecer al otro lado de la pantalla3El ratón
Sigue el punteroHaz clic en la gemaPractica por tu cuenta: Playground de Pygame