Menu
CoddyTech

Una particella

Fa parte della sezione Suoni e sensazioni di gioco del percorso Pygame di Coddy. Lezione 8 di 23.

Scintille, polvere, fumo e coriandoli sono composti da particelle: tante piccole cose che schizzano fuori, vivono per poco tempo e svaniscono. Per una particella bastano pochi numeri: dove si trova, quanto si sposta a ogni fotogramma e quanti fotogrammi le restano da vivere. Un dizionario le contiene:

{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}

vx e vy sono la sua velocità: 2 pixel a destra e 3 verso l’alto a ogni fotogramma. Tieni tutte le particelle in un’unica lista e, a ogni fotogramma, spostale tutte e sottrai un fotogramma alla loro durata:

for p in particles:
    p["x"] += p["vx"]
    p["y"] += p["vy"]
    p["life"] -= 1

Disegna ogni particella finché la sua durata è superiore a 0, come un piccolo cerchio:

for p in particles:
    if p["life"] > 0:
        pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)

Una particella non ha un’immagine né una classe. È poco costosa, quindi un gioco può averne centinaia contemporaneamente.

challenge icon

Sfida

Facile

Fai in modo che l’emettitore grigio al centro spari una scintilla:

  1. Quando viene premuto Space, aggiungi {"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30} a particles.
  2. A ogni fotogramma, sposta ogni particella dei valori vx e vy e diminuisci il suo life di 1.
  3. Disegna ogni particella con una durata superiore a 0 come un cerchio arancione (255, 160, 60) di raggio 3.

Provalo tu

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Sparks")
clock = pygame.time.Clock()

particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((30, 30, 46))
    pygame.draw.circle(screen, (120, 120, 140), (240, 180), 8)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Tutte le lezioni di Suoni e sensazioni di gioco

Esercitati da solo: Playground Pygame