Menu
CoddyTech

파티클 하나

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)

입자에는 이미지도 클래스도 없습니다. 입자는 부담이 적으므로 게임에서 한 번에 수백 개를 사용할 수 있습니다.

challenge icon

챌린지

쉬움

가운데의 회색 발사체에서 불꽃이 나오게 하세요:

  1. Space 키를 누르면 {"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}을 particles에 추가하세요.
  2. 매 프레임마다 각 입자를 vx와 vy만큼 이동시키고, life를 1만큼 줄이세요.
  3. 수명이 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 플레이그라운드