Menu
CoddyTech

Cząsteczka

Część sekcji Dźwięk i odczucia z gry ścieżki Pygame w Coddy. Lekcja 8 z 23.

Iskry, kurz, dym i konfetti składają się z cząsteczek: wielu drobnych elementów, które wylatują, przez krótki czas pozostają w ruchu i znikają. Cząsteczka potrzebuje tylko kilku liczb: gdzie się znajduje, o ile przesuwa się w każdej klatce oraz ile klatek pozostało jej do końca istnienia. Przechowuje się je w słowniku:

{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}

vx i vy określają jej prędkość: 2 piksele w prawo i 3 w górę w każdej klatce. Przechowuj wszystkie cząsteczki na jednej liście, a następnie w każdej klatce przesuwaj je wszystkie i odejmuj jedną klatkę od czasu ich życia:

for p in particles:
    p["x"] += p["vx"]
    p["y"] += p["vy"]
    p["life"] -= 1

Rysuj każdą cząsteczkę, dopóki jej czas życia jest większy od 0, jako małe kółko:

for p in particles:
    if p["life"] > 0:
        pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)

Cząsteczka nie ma obrazu ani klasy. Jest lekka, więc gra może zawierać ich jednocześnie setki.

challenge icon

Wyzwanie

Łatwy

Spraw, aby szary emiter pośrodku wystrzelił iskierkę:

  1. Po naciśnięciu klawisza spacji dodaj {"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30} do particles.
  2. W każdej klatce przesuń każdą cząsteczkę o wartości vx i vy, a jej life zmniejsz o 1.
  3. Narysuj każdą cząsteczkę, której życie jest większe od 0, jako pomarańczowe kółko (255, 160, 60) o promieniu 3.

Spróbuj swoich sił

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Sparks")
clock = pygame.time.Clock()

particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((30, 30, 46))
    pygame.draw.circle(screen, (120, 120, 140), (240, 180), 8)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Wszystkie lekcje w sekcji Dźwięk i odczucia z gry

Poćwicz samodzielnie: Edytor online Pygame