Une explosion de particules
Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 9 sur 23.
Une particule est un point. Une explosion est composée de nombreuses particules créées dans la même image, au même endroit, chacune partant dans sa propre direction. Crée-les avec une boucle for et donne à chacune une vitesse aléatoire :
for i in range(20):
particles.append({
"x": x,
"y": y,
"vx": random.uniform(-3, 3),
"vy": random.uniform(-3, 3),
"life": random.randint(20, 40),
})random.uniform(-3, 3) est un nombre décimal aléatoire compris entre -3 et 3, ce qui permet à une particule de se déplacer dans n’importe quelle direction, lentement ou rapidement. randint ne donnerait que des nombres entiers, et l’explosion partirait en quelques lignes droites.
Les appels aléatoires doivent se trouver dans la boucle. Choisis vx une seule fois avant la boucle et les 20 particules auront la même vitesse : elles se déplaceront ensemble comme un seul point.
Une durée de vie aléatoire fait disparaître l’explosion de manière irrégulière, ce qui semble naturel : les particules lentes près du centre et les rapides en périphérie disparaissent à des moments différents.
Un clic de souris est un événement pygame.MOUSEBUTTONDOWN, et event.pos correspond au point où le clic a eu lieu.
Défi
MoyenUn clic crée une particule qui monte. Transforme-la en une explosion :
- Lors d’un clic, ajoute 20 particules au point cliqué.
- Attribue à chacune
vxetvyà partir derandom.uniform(-3, 3), ainsi qu’unelifeà partir derandom.randint(20, 40).
Essayez vous-même
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fireworks")
clock = pygame.time.Clock()
particles = []
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
particles.append({"x": x, "y": y, "vx": 0, "vy": -2, "life": 30})
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, 160, 60), (p["x"], p["y"]), 3)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Son et sensations de jeu
4Tremblement de l’écran et flash d’impact
Tremblement de l’écranFlash d’impactArrêt sur impactRester subtil3Particules
Une particuleUne explosion de particulesFondu et rétrécissementSupprimer les particules mortesEntraînez-vous par vous-même : Playground Pygame