파티클 하나
Coddy Pygame 여정의 사운드와 게임의 손맛 섹션에 포함된 레슨. 23개 중 8번째.
불꽃, 먼지, 연기, 색종이 조각은 입자로 이루어져 있습니다. 입자는 밖으로 튀어나와 잠깐 동안 존재하다가 사라지는 아주 작은 것들입니다. 입자 하나에는 몇 가지 숫자만 있으면 됩니다. 위치, 프레임마다 이동하는 거리, 그리고 남은 수명 프레임 수입니다. 딕셔너리에 이 값들을 담습니다.
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}vx와 vy는 속도입니다. 프레임마다 오른쪽으로 2픽셀, 위쪽으로 3픽셀 이동합니다. 모든 입자를 하나의 리스트에 담고, 매 프레임 입자를 모두 이동시킨 다음 수명을 1프레임 줄입니다.
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1수명이 0보다 큰 동안 각 입자를 작은 원으로 그립니다.
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)입자에는 이미지도 클래스도 없습니다. 입자는 부담이 적으므로 게임에서 한 번에 수백 개를 사용할 수 있습니다.
챌린지
쉬움가운데의 회색 발사체에서 불꽃이 나오게 하세요:
- Space 키를 누르면
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}을particles에 추가하세요. - 매 프레임마다 각 입자를
vx와vy만큼 이동시키고,life를 1만큼 줄이세요. - 수명이 0보다 큰 각 입자를 주황색
(255, 160, 60)원으로, 반지름 3으로 그리세요.
직접 해보기
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()
사운드와 게임의 손맛의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드