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 + 1Con 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.
Desafío
IntermedioLa tecla Espacio crea un anillo de 8 chispas, cada una dura 40 fotogramas. Haz que se enfríen mientras vuelan:
- Dibuja cada chispa con un radio de
life // 10 + 1. - 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
1Efectos de sonido
Cargar un sonidoSonido al ocurrir un eventoVolumen del sonidoSonidos y teclas presionadas4Sacudida de pantalla y destello de impacto
Sacudida de pantallaDestello de impactoPausa tras el impactoMantén la sutileza6Pulir la Patrulla Estelar
Sonidos de la Patrulla EstelarChispas con cada impactoPractica por tu cuenta: Playground de Pygame