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.
Tantangan
SedangSatu klik membuat satu partikel yang naik. Ubah menjadi semburan:
- Saat diklik, tambahkan 20 partikel pada titik yang diklik.
- Beri setiap partikel
vxdanvydarirandom.uniform(-3, 3)sertalifedarirandom.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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Suara dan Sensasi Bermain
4Guncangan Layar dan Kilatan Saat Terkena Serangan
Guncangan LayarKilatan Saat Terkena SeranganJeda BenturanJangan Berlebihan6Sempurnakan Patroli Bintang
Suara Patroli BintangPercikan di Setiap BenturanLatihan sendiri: Playground Pygame