Sebuah Partikel
Termasuk bagian Suara dan Sensasi Bermain dalam perjalanan Pygame di Coddy. Pelajaran 8 dari 23.
Percikan api, debu, asap, dan konfeti tersusun dari partikel: banyak benda kecil yang beterbangan, bertahan sebentar, lalu menghilang. Satu partikel hanya memerlukan beberapa angka: posisinya, seberapa jauh partikel itu bergerak setiap frame, dan berapa banyak frame yang tersisa sebelum menghilang. Sebuah dictionary menyimpannya:
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}vx dan vy adalah kecepatannya: 2 piksel ke kanan dan 3 piksel ke atas setiap frame. Simpan semua partikel dalam satu list, lalu setiap frame gerakkan semuanya dan kurangi sisa hidupnya sebanyak satu frame:
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1Gambar setiap partikel selama sisa hidupnya lebih dari 0, sebagai lingkaran kecil:
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)Partikel tidak memiliki gambar dan tidak menggunakan class. Biayanya rendah, jadi sebuah game bisa memiliki ratusan partikel sekaligus.
Tantangan
MudahBuat emitter abu-abu di tengah menembakkan percikan:
- Saat Space ditekan, tambahkan
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}keparticles. - Setiap frame, gerakkan setiap partikel sebesar
vxdanvy, lalu kurangilife-nya sebesar 1. - Gambar setiap partikel yang masa hidupnya lebih dari 0 sebagai lingkaran oranye
(255, 160, 60)dengan radius 3.
Coba sendiri
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()
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