Mộ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 8 trên 23.
Tia lửa, bụi, khói và giấy kim tuyến gồm nhiều hạt: những vật thể nhỏ li ti bay ra, tồn tại trong thời gian ngắn rồi biến mất. Mỗi hạt chỉ cần một vài con số: vị trí của nó, mỗi khung hình nó di chuyển bao xa và còn sống được bao nhiêu khung hình. Một từ điển chứa các thông tin này:
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}vx và vy là vận tốc của hạt: mỗi khung hình, hạt di chuyển sang phải 2 pixel và lên trên 3 pixel. Lưu mọi hạt trong cùng một danh sách, rồi mỗi khung hình di chuyển tất cả hạt và giảm thời gian sống của mỗi hạt đi một khung hình:
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1Vẽ mỗi hạt dưới dạng một hình tròn nhỏ khi thời gian sống của nó lớn hơn 0:
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)Hạt không cần hình ảnh hay lớp. Hạt có chi phí xử lý thấp, nên trò chơi có thể có hàng trăm hạt cùng lúc.
Thử thách
DễKhiến bộ phát màu xám bắn ra một tia lửa.
- Khi nhấn phím Space, thêm
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}vàoparticles. - Ở mỗi khung hình, di chuyển từng hạt theo
vxvàvy, đồng thời giảmlifeđi 1. - Vẽ mỗi hạt có
lifelớn hơn 0 thành hình tròn màu cam(255, 160, 60)với bán kính 3.
Nhấn Chơi rồi nhấn phím Space: một tia lửa bay ra rồi tắt. Sau đó nhấn Kiểm tra.
Tự làm thử
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()
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