Dissolvenza e rimpicciolimento
Fa parte della sezione Suoni e sensazioni di gioco del percorso Pygame di Coddy. Lezione 10 di 23.
Una scintilla che rimane uguale fino a scomparire sembra un punto spento. Le scintille reali si raffreddano: si rimpiccioliscono e cambiano colore mentre si spengono. Hai già il numero che serve, la life della particella. Calcola da esso le dimensioni e il colore quando la disegni.
Il raggio può dipendere direttamente dalla vita:
radius = p["life"] // 10 + 1Con 40 fotogrammi rimanenti, il risultato è 5; con 9 o meno, 1. Il + 1 mantiene il raggio a 1 o più: un cerchio di raggio 0 non disegna nulla e la scintilla scomparirebbe troppo presto.
Per il colore, scegli tra alcuni passaggi, dal caldo al freddo:
if p["life"] > 25:
color = (255, 220, 80)
elif p["life"] > 10:
color = (255, 140, 40)
else:
color = (180, 50, 40)Verifica prima il numero più grande. Scritta nell’ordine opposto, life > 10 intercetterebbe anche una vita di 30 e il ramo giallo non potrebbe mai essere eseguito.
Sfida
MedioLa barra spaziatrice crea un anello di 8 scintille, ognuna delle quali dura 40 fotogrammi. Falle raffreddare mentre volano:
- Disegna ogni scintilla con raggio
life // 10 + 1. - Colorala di giallo
(255, 220, 80)quando la sua durata è superiore a 25, di arancione(255, 140, 40)quando è superiore a 10 e di rosso scuro(180, 50, 40)dopo.
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Ring of Sparks")
clock = pygame.time.Clock()
DIRECTIONS = [(3, 0), (2, 2), (0, 3), (-2, 2), (-3, 0), (-2, -2), (0, -3), (2, -2)]
particles = []
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
for vx, vy in DIRECTIONS:
particles.append({"x": 240, "y": 180, "vx": vx, "vy": vy, "life": 40})
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1
screen.fill((20, 20, 36))
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 220, 80), (p["x"], p["y"]), 4)
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 discreto3Particelle
Una particellaUn'esplosione di particelleDissolvenza e rimpicciolimentoRimuovere le particelle inattive6Perfezionare Star Patrol
Suoni di Star PatrolScintille a ogni colpoEsercitati da solo: Playground Pygame