Menu
CoddyTech

Une particule

Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 8 sur 23.

Les étincelles, la poussière, la fumée et les confettis sont constitués de particules : de minuscules éléments qui jaillissent, ne vivent que peu de temps et disparaissent. Une particule n’a besoin que de quelques nombres : sa position, la distance dont elle se déplace à chaque image et le nombre d’images qu’il lui reste à vivre. Un dictionnaire les stocke :

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

vx et vy représentent sa vitesse : 2 pixels vers la droite et 3 vers le haut à chaque image. Place chaque particule dans une seule liste, puis déplace-les toutes à chaque image et retire une image à leur durée de vie :

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

Affiche chaque particule tant que sa durée de vie est supérieure à 0, sous la forme d’un petit cercle :

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

Une particule n’a ni image ni classe. Elle est peu coûteuse, donc un jeu peut en avoir des centaines à la fois.

challenge icon

Défi

Facile

Fais tirer une étincelle à l’émetteur gris au milieu :

  1. Lorsque tu appuies sur Espace, ajoute {"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30} à particles.
  2. À chaque image, déplace chaque particule selon ses valeurs vx et vy, et diminue sa valeur life de 1.
  3. Dessine chaque particule dont la durée de vie est supérieure à 0 sous la forme d’un cercle orange (255, 160, 60) de rayon 3.

Essayez vous-même

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()

Toutes les leçons de Son et sensations de jeu

Entraînez-vous par vous-même : Playground Pygame