Menu
CoddyTech

페이드 아웃과 축소

Coddy Pygame 여정의 사운드와 게임의 손맛 섹션에 포함된 레슨. 23개 중 10번째.

사라질 때까지 그대로인 불꽃은 꺼진 점처럼 보입니다. 실제 불꽃은 식으면서 작아지고 색이 변합니다. 이미 그에 해당하는 숫자인 입자의 life가 있습니다. 그릴 때 이 값으로 크기와 색을 계산하세요.

반지름은 수명에 따라 바로 정할 수 있습니다.

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

40프레임이 남았을 때는 5이고, 9 이하일 때는 1입니다. + 1은 반지름이 1 이상이 되도록 합니다. 반지름이 0인 원은 아무것도 그리지 않으므로 불꽃이 일찍 사라집니다.

색은 뜨거운 색에서 차가운 색으로 몇 단계를 정하세요.

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

가장 큰 숫자부터 검사하세요. 순서를 반대로 쓰면 life > 10이 수명 30도 잡아내므로 노란색 분기는 절대 실행되지 않습니다.

challenge icon

챌린지

중급

스페이스 키를 누르면 불꽃 8개가 고리 모양으로 퍼져 나가며, 각각 40프레임 동안 살아 있습니다. 불꽃이 날아가면서 서서히 식도록 만드세요:

  1. 각 불꽃을 반지름 life // 10 + 1로 그리세요.
  2. 수명이 25보다 클 때는 노란색 (255, 220, 80), 10보다 클 때는 주황색 (255, 140, 40), 그 이후에는 진한 빨간색 (180, 50, 40)으로 그리세요.

직접 해보기

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()

사운드와 게임의 손맛의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드