Menu
CoddyTech

Ledakan Partikel

Termasuk bagian Suara dan Sensasi Bermain dalam perjalanan Pygame di Coddy. Pelajaran 9 dari 23.

Satu partikel adalah sebuah titik. Ledakan terdiri dari banyak partikel yang dibuat pada frame dan titik yang sama, masing-masing bergerak ke arahnya sendiri. Buat partikel dengan for loop, lalu beri setiap partikel kecepatan acak:

for i in range(20):
    particles.append({
        "x": x,
        "y": y,
        "vx": random.uniform(-3, 3),
        "vy": random.uniform(-3, 3),
        "life": random.randint(20, 40),
    })

random.uniform(-3, 3) adalah angka desimal acak dari -3 hingga 3, jadi partikel bisa bergerak ke arah mana pun, pelan atau cepat. randint hanya memberikan bilangan bulat, sehingga ledakan akan bergerak dalam beberapa garis lurus.

Panggilan acak harus berada di dalam perulangan. Jika kamu memilih vx sekali sebelum perulangan, semua 20 partikel akan mendapatkan kecepatan yang sama: mereka bergerak bersama sebagai satu titik.

Umur acak membuat ledakan memudar secara tidak merata, sehingga tampak alami: partikel yang bergerak pelan di dekat tengah dan yang bergerak cepat di tepi menghilang pada waktu yang berbeda.

Klik mouse adalah event pygame.MOUSEBUTTONDOWN, dan event.pos adalah titik yang diklik.

challenge icon

Tantangan

Sedang

Satu klik membuat satu partikel yang naik. Ubah menjadi semburan:

  1. Saat diklik, tambahkan 20 partikel pada titik yang diklik.
  2. Beri setiap partikel vx dan vy dari random.uniform(-3, 3) serta life dari random.randint(20, 40).

Coba sendiri

import random
import pygame

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

particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            particles.append({"x": x, "y": y, "vx": 0, "vy": -2, "life": 30})

    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, 160, 60), (p["x"], p["y"]), 3)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Suara dan Sensasi Bermain

Latihan sendiri: Playground Pygame