Menu
CoddyTech

Mờ dần và thu nhỏ

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 10 trên 23.

Một tia lửa giữ nguyên cho đến khi biến mất trông như một chấm vừa tắt. Tia lửa thật nguội dần: chúng co lại và đổi màu khi tắt. Bạn đã có con số thể hiện điều đó, life của hạt. Hãy tính kích thước và màu sắc từ giá trị này khi vẽ.

Bán kính có thể thay đổi trực tiếp theo giá trị life:

radius = p["life"] // 10 + 1

Khi còn 40 khung hình, bán kính là 5; khi còn 9 khung hình trở xuống, bán kính là 1. + 1 giữ bán kính ở mức 1 trở lên: đường tròn có bán kính 0 sẽ không vẽ gì cả, và tia lửa sẽ biến mất sớm.

Để chọn màu, hãy chọn trong một vài mức, từ nóng đến lạnh:

if p["life"] > 25:
    color = (255, 220, 80)
elif p["life"] > 10:
    color = (255, 140, 40)
else:
    color = (180, 50, 40)

Hãy kiểm tra số lớn nhất trước. Nếu viết theo thứ tự ngược lại, life > 10 cũng sẽ nhận giá trị life là 30, và nhánh màu vàng sẽ không bao giờ chạy.

challenge icon

Thử thách

Trung bình

Khi bay đi, hãy để các tia lửa nguội dần.

  1. Vẽ mỗi tia lửa với bán kính life // 10 + 1.
  2. Tô màu vàng (255, 220, 80) khi thời gian sống của tia lửa còn trên 25, màu cam (255, 140, 40) khi còn trên 10 và màu đỏ sẫm (180, 50, 40) sau đó.

Nhấn Chơi rồi nhấn Space: vòng tròn thu nhỏ và chuyển từ vàng sang đỏ. 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("Ring of Sparks")
clock = pygame.time.Clock()

DIRECTIONS = [(3, 0), (2, 2), (0, 3), (-2, 2), (-3, 0), (-2, -2), (0, -3), (2, -2)]
particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            for vx, vy in DIRECTIONS:
                particles.append({"x": 240, "y": 180, "vx": vx, "vy": vy, "life": 40})

    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, 220, 80), (p["x"], p["y"]), 4)
    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