Menu
CoddyTech

파티클 폭발

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

입자는 하나의 점입니다. 폭발 효과는 같은 프레임의 같은 지점에서 만들어져 각자 다른 방향으로 날아가는 여러 입자입니다. for 루프로 입자를 만들고, 각 입자에 무작위 속도를 지정하세요.

for i in range(20):
    particles.append({
        "x": x,
        "y": y,
        "vx": random.uniform(-3, 3),
        "vy": random.uniform(-3, 3),
        "life": random.randint(20, 40),
    })

random.uniform(-3, 3)은 -3부터 3까지의 무작위 실수이므로 입자는 어느 방향으로든 느리거나 빠르게 움직일 수 있습니다. randint는 정수만 반환하므로 폭발 효과는 몇 개의 직선 방향으로만 퍼져 나갑니다.

무작위 값을 생성하는 호출은 반복문 안에 있어야 합니다. 반복문을 실행하기 전에 vx를 한 번만 정하면 입자 20개 모두 같은 속도를 얻어 하나의 점처럼 함께 날아갑니다.

수명을 무작위로 정하면 폭발 효과가 고르지 않게 사라져 자연스러워 보입니다. 가운데 근처의 느린 입자와 가장자리의 빠른 입자가 서로 다른 시점에 사라집니다.

마우스 클릭은 pygame.MOUSEBUTTONDOWN 이벤트이며, event.pos는 클릭한 지점입니다.

challenge icon

챌린지

중급

클릭하면 입자 하나가 위로 올라갑니다. 이것을 폭발 효과로 바꿔 보세요.

  1. 클릭하면 클릭한 위치에 입자 20개를 추가하세요.
  2. 각 입자에 random.uniform(-3, 3)에서 가져온 vx와 vy, 그리고 random.randint(20, 40)에서 가져온 life를 부여하세요.

직접 해보기

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fireworks")
clock = pygame.time.Clock()

particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            particles.append({"x": x, "y": y, "vx": 0, "vy": -2, "life": 30})

    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, 160, 60), (p["x"], p["y"]), 3)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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

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