Menu
CoddyTech

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

Vẽ 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.

challenge icon

Thử thách

Dễ

Khiến bộ phát màu xám bắn ra một tia lửa.

  1. Khi nhấn phím Space, thêm {"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30} vào particles.
  2. Ở mỗi khung hình, di chuyển từng hạt theo vx và vy, đồng thời giảm life đi 1.
  3. Vẽ mỗi hạt có life lớ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

Tự luyện tập: Playground Pygame