Menu
CoddyTech

Fondu et rétrécissement

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

Une étincelle qui reste identique jusqu'à sa disparition ressemble à un point qui s'éteint. Les vraies étincelles refroidissent : elles rétrécissent et changent de couleur en mourant. Tu as déjà le nombre qui permet de le faire, life de la particule. Calcule sa taille et sa couleur à partir de cette valeur au moment du dessin.

Le rayon peut dépendre directement de la durée de vie :

radius = p["life"] // 10 + 1

Avec 40 images restantes, il vaut 5 ; avec 9 ou moins, 1. Le + 1 maintient le rayon à 1 ou plus : un cercle de rayon 0 ne dessine rien, et l'étincelle disparaîtrait prématurément.

Pour la couleur, choisis parmi quelques étapes, du chaud au froid :

if p["life"] > 25:
    color = (255, 220, 80)
elif p["life"] > 10:
    color = (255, 140, 40)
else:
    color = (180, 50, 40)

Teste d'abord le nombre le plus élevé. Écrite dans l'autre sens, la condition life > 10 serait aussi vraie pour une durée de vie de 30, et la branche jaune ne pourrait jamais s'exécuter.

challenge icon

Défi

Moyen

La barre d’espace crée un anneau de 8 étincelles, chacune durant 40 images. Faites-les refroidir pendant leur déplacement :

  1. Dessinez chaque étincelle avec un rayon de life // 10 + 1.
  2. Colorez-la en jaune (255, 220, 80) tant que sa durée de vie est supérieure à 25, en orange (255, 140, 40) tant qu’elle est supérieure à 10, puis en rouge foncé (180, 50, 40).

Essayez vous-même

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

Toutes les leçons de Son et sensations de jeu

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