Một đợt hạt
Thuộc phần Âm thanh và cảm giác chơi trong hành trình Pygame của Coddy. Bài học 9 trên 23.
Một hạt là một chấm. Một đợt bùng phát gồm nhiều hạt được tạo ra trong cùng một khung hình tại cùng một điểm, mỗi hạt bay theo một hướng riêng. Tạo chúng bằng vòng lặp for và gán cho mỗi hạt một vận tốc ngẫu nhiên:
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) là một số thập phân ngẫu nhiên từ -3 đến 3, nên hạt có thể di chuyển theo bất kỳ hướng nào, chậm hoặc nhanh. randint chỉ cho số nguyên, khiến các hạt trong đợt bùng phát bay theo một vài đường thẳng.
Các lệnh gọi tạo số ngẫu nhiên phải nằm bên trong vòng lặp. Nếu gán vx một lần trước vòng lặp, cả 20 hạt sẽ có cùng vận tốc: chúng bay cùng nhau thành một chấm.
Thời gian sống ngẫu nhiên khiến đợt bùng phát mờ dần không đồng đều, trông tự nhiên hơn: những hạt chậm gần giữa và những hạt nhanh ở rìa biến mất vào các thời điểm khác nhau.
Lần nhấp chuột tạo ra sự kiện pygame.MOUSEBUTTONDOWN, còn event.pos là vị trí được nhấp.
Thử thách
Trung bìnhBiến hạt đơn lẻ thành một chùm hạt bắn ra.
- Khi nhấp chuột, thêm 20 hạt vào điểm vừa nhấp.
- Gán cho mỗi hạt
vxvàvygiá trị từrandom.uniform(-3, 3), cùng với giá trịlifelấy từrandom.randint(20, 40).
Nhấn Chơi rồi nhấp chuột: các tia sáng bắn ra mọi hướng. Sau đó nhấn Kiểm tra.
Tự làm thử
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()
Tất cả bài học trong Âm thanh và cảm giác chơi
4Rung màn hình và chớp sáng khi trúng đòn
Rung màn hìnhChớp sáng khi trúng đònKhựng hình khi trúng đònGiữ hiệu ứng tinh tế6Hoàn thiện đội tuần tra sao
Âm thanh đội tuần tra saoTia lửa mỗi lần va chạmTự luyện tập: Playground Pygame