Evidenzia al passaggio
Fa parte della sezione Il game loop del percorso Pygame di Coddy. Lezione 15 di 32.
Eseguire ogni volta il test gx <= x <= gx + 30 diventa lungo. Pygame ha una classe per i rettangoli, pygame.Rect, che raggruppa posizione e dimensioni e svolge questi test per te:
gem = pygame.Rect(225, 165, 30, 30)
if gem.collidepoint(event.pos):
score += 1gem.collidepoint(point) è True quando il punto si trova all'interno del Rect. Puoi comunque leggere e modificare gem.x e gem.y, e un Rect definisce i propri punti: gem.midtop, gem.midright, gem.midbottom e gem.midleft sono i punti medi dei suoi lati, che corrispondono ai quattro angoli della gemma.
Lo stesso test con la posizione del puntatore ti dice se il giocatore sta puntando la gemma. Nei giochi questo viene mostrato con un evidenziamento:
if gem.collidepoint(pygame.mouse.get_pos()):
pygame.draw.rect(screen, (255, 196, 0), gem.inflate(10, 10), 2)gem.inflate(10, 10) è un nuovo Rect più largo e più alto di 10 pixel, con lo stesso centro, quindi il contorno si trova 5 pixel all'esterno della gemma.
Sfida
Facile- Sostituisci
gx, gy = 225, 165congem = pygame.Rect(225, 165, 30, 30)e usagem.xegem.yal posto digxegy. - Disegna la gemma usando
[gem.midtop, gem.midright, gem.midbottom, gem.midleft]e verifica i clic congem.collidepoint(event.pos). - Dopo la gemma, quando il puntatore è sopra di essa, disegna il contorno giallo
(255, 196, 0)digem.inflate(10, 10), largo2pixel.
Provalo tu
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()
Tutte le lezioni di Il game loop
3Il mouse
Segui il puntatoreClicca sulla gemmaEsercitati da solo: Playground Pygame