Menu
CoddyTech

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"] -= 1

Gambar 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.

challenge icon

Tantangan

Mudah

Buat emitter abu-abu di tengah menembakkan percikan:

  1. Saat Space ditekan, tambahkan {"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30} ke particles.
  2. Setiap frame, gerakkan setiap partikel sebesar vx dan vy, lalu kurangi life-nya sebesar 1.
  3. 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

Latihan sendiri: Playground Pygame