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 + 1Avec 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.
Défi
MoyenLa barre d’espace crée un anneau de 8 étincelles, chacune durant 40 images. Faites-les refroidir pendant leur déplacement :
- Dessinez chaque étincelle avec un rayon de
life // 10 + 1. - 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
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