Zanikanie i zmniejszanie
Część sekcji Dźwięk i odczucia z gry ścieżki Pygame w Coddy. Lekcja 10 z 23.
Iskra, która pozostaje niezmienna aż do zniknięcia, wygląda jak wyłączona kropka. Prawdziwe iskry stygną: kurczą się i zmieniają kolor, gdy gasną. Masz już odpowiednią wartość — life cząstki. Oblicz na jej podstawie rozmiar i kolor podczas rysowania.
Promień może zależeć bezpośrednio od czasu życia:
radius = p["life"] // 10 + 1Przy 40 pozostałych klatkach wynosi 5; przy 9 lub mniej — 1. + 1 utrzymuje promień na poziomie co najmniej 1: okrąg o promieniu 0 niczego nie rysuje, a iskra zniknęłaby przedwcześnie.
Wybierz kolor z kilku etapów, od gorącego do zimnego:
if p["life"] > 25:
color = (255, 220, 80)
elif p["life"] > 10:
color = (255, 140, 40)
else:
color = (180, 50, 40)Najpierw sprawdź większą wartość. Gdyby zapisać warunki w odwrotnej kolejności, life > 10 pasowałoby również do czasu życia równego 30, a gałąź żółtego koloru nigdy by się nie wykonała.
Wyzwanie
ŚredniSpacja tworzy pierścień z 8 iskier, z których każda żyje 40 klatek. Niech stygną podczas lotu:
- Rysuj każdą iskrę z promieniem
life // 10 + 1. - Koloruj ją na żółto
(255, 220, 80), gdy jej życie przekracza 25, na pomarańczowo(255, 140, 40), gdy przekracza 10, a potem na ciemnoczerwono(180, 50, 40).
Spróbuj swoich sił
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()
Wszystkie lekcje w sekcji Dźwięk i odczucia z gry
1Efekty dźwiękowe
Wczytywanie dźwiękuDźwięk w reakcji na zdarzenieGłośność dźwiękuDźwięki i przytrzymane klawisze4Wstrząs ekranu i błysk po trafieniu
Wstrząs ekranuBłysk po trafieniuPauza przy trafieniuNie przesadzajPoćwicz samodzielnie: Edytor online Pygame