Menu
CoddyTech

Parçacık Patlaması

Coddy'nin Pygame Journey'sinin Ses ve Oyun Hissi bölümünün bir parçası. Ders 9 / 23.

Tek bir parçacık bir noktadır. Bir patlama, aynı karede aynı noktada oluşturulan ve her biri kendi yönünde uçan birçok parçacıktan oluşur. Bunları bir for döngüsüyle oluşturun ve her birine rastgele bir hız verin:

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), -3 ile 3 arasında rastgele bir ondalık sayıdır; bu nedenle parçacık yavaş ya da hızlı şekilde herhangi bir yönde hareket edebilir. randint yalnızca tam sayılar verir ve patlama birkaç düz çizgi boyunca dışarı doğru uçar.

Rastgele değer üreten çağrılar döngünün içinde olmalıdır. Döngüden önce bir kez vx seçerseniz 20 parçacığın tamamı aynı hıza sahip olur: tek bir nokta hâlinde birlikte uçarlar.

Rastgele bir ömür, patlamanın eşit olmayan biçimde sönmesini sağlar ve bu doğal görünür: merkeze yakın yavaş parçacıklar ve kenardaki hızlı parçacıklar farklı zamanlarda söner.

Fare tıklaması bir pygame.MOUSEBUTTONDOWN olayıdır ve event.pos tıklanan noktadır.

challenge icon

Görev

Orta

Bir tıklama, yükselen bir parçacık oluşturur. Bunu bir patlamaya dönüştür:

  1. Tıklama anında, tıklanan noktaya 20 parçacık ekle.
  2. Her birine random.uniform(-3, 3) değerinden vx ve vy, random.randint(20, 40) değerinden de bir life ver.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Ses ve Oyun Hissi bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground