Effetto pop alla raccolta
Fa parte della sezione Suoni e sensazioni di gioco del percorso Pygame di Coddy. Lezione 18 di 23.
Quando raccogli una gemma, il punteggio aumenta di uno, ma stai guardando la gemma, non l’angolo. Un breve effetto pop attira lo sguardo sul contatore: l’icona diventa più grande con un salto, poi torna alle sue dimensioni.
Mantieni una scala, 1.0 per le dimensioni normali. Quando raccogli una gemma, impostala su 1.6; a ogni fotogramma torna gradualmente verso 1 usando la stessa riga di prima:
pop = 1.6 # quando viene raccolta una gemma
pop += (1 - pop) * 0.2 # a ogni frameQuando disegni, la scala determina le dimensioni. Crea il Rect con quelle dimensioni e poi posiziona il suo centro, così l’icona si ingrandisce attorno al punto centrale invece che dall’angolo:
size = int(20 * pop)
icon = pygame.Rect(0, 0, size, size)
icon.center = (30, 30)Il salto è istantaneo e il ritorno è graduale. È questo che dà l’impressione di un effetto pop: una frazione di 0.2 la riporta alle dimensioni iniziali in circa un quarto di secondo.
Per un’immagine, ridimensionala con pygame.transform.scale_by(image, pop) e centra il suo Rect allo stesso modo.
Sfida
FacileFai clic sulla gemma viola per raccoglierla. Fai rimbalzare l’icona dorata:
- Imposta
pop = 1.0prima del ciclo. - Imposta
pop = 1.6quando raccogli una gemma. - A ogni fotogramma, riportala gradualmente al valore iniziale:
pop += (1 - pop) * 0.2. - Disegna l’icona con una larghezza e un’altezza di
int(20 * pop)pixel, mantenendola centrata in(30, 30).
Provalo tu
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Picker")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")
gem = pygame.Rect(300, 200, 24, 24)
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN and gem.collidepoint(event.pos):
score += 1
coin_sound.play()
gem.topleft = (random.randint(80, 420), random.randint(90, 300))
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (170, 90, 230), gem)
icon = pygame.Rect(0, 0, 20, 20)
icon.center = (30, 30)
pygame.draw.rect(screen, (255, 200, 60), icon)
label = font.render(f"x {score}", True, (240, 240, 240))
screen.blit(label, (52, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tutte le lezioni di Suoni e sensazioni di gioco
1Effetti sonori
Caricare un suonoSuono al verificarsi di un eventoVolume del suonoSuoni e tasti tenuti premuti4Scuotimento dello schermo e flash all’impatto
Scuotimento dello schermoFlash all’impattoPausa all’impattoMantienilo discreto5Movimento fluido
Muoversi verso un obiettivoUna telecamera fluidaEffetto pop alla raccoltaFluidità a qualsiasi frequenza di fotogrammiEsercitati da solo: Playground Pygame