Menu
CoddyTech

Desvanecer y encoger

Parte de la sección Sonido y sensaciones del juego del Journey de Pygame de Coddy. Lección 10 de 23.

Una chispa que permanece igual hasta desaparecer parece un punto que se apaga. Las chispas reales se enfrían: se encogen y cambian de color mientras se extinguen. Ya tienes el número que indica eso: la life de la partícula. Calcula su tamaño y su color a partir de ese valor al dibujarla.

El radio puede depender directamente de la vida:

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

Con 40 fotogramas restantes, el radio es 5; con 9 o menos, es 1. El + 1 mantiene el radio en 1 o más: un círculo de radio 0 no dibuja nada y la chispa desaparecería antes de tiempo.

Para el color, elige entre unos pocos tonos, del más cálido al más frío:

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

Comprueba primero el número más grande. Si lo escribieras en el orden contrario, life > 10 también incluiría una vida de 30, y la rama amarilla nunca se ejecutaría.

challenge icon

Desafío

Intermedio

La tecla Espacio crea un anillo de 8 chispas, cada una dura 40 fotogramas. Haz que se enfríen mientras vuelan:

  1. Dibuja cada chispa con un radio de life // 10 + 1.
  2. Coloréala de amarillo (255, 220, 80) mientras su vida sea superior a 25, de naranja (255, 140, 40) mientras sea superior a 10 y de rojo oscuro (180, 50, 40) después.

Pruébalo tú mismo

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

Todas las lecciones de Sonido y sensaciones del juego

Practica por tu cuenta: Playground de Pygame