페이드 아웃과 축소
Coddy Pygame 여정의 사운드와 게임의 손맛 섹션에 포함된 레슨. 23개 중 10번째.
사라질 때까지 그대로인 불꽃은 꺼진 점처럼 보입니다. 실제 불꽃은 식으면서 작아지고 색이 변합니다. 이미 그에 해당하는 숫자인 입자의 life가 있습니다. 그릴 때 이 값으로 크기와 색을 계산하세요.
반지름은 수명에 따라 바로 정할 수 있습니다.
radius = p["life"] // 10 + 140프레임이 남았을 때는 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도 잡아내므로 노란색 분기는 절대 실행되지 않습니다.
챌린지
중급스페이스 키를 누르면 불꽃 8개가 고리 모양으로 퍼져 나가며, 각각 40프레임 동안 살아 있습니다. 불꽃이 날아가면서 서서히 식도록 만드세요:
- 각 불꽃을 반지름
life // 10 + 1로 그리세요. - 수명이 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 플레이그라운드