Menu
CoddyTech

피격 플래시

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

적을 공격하면 체력 막대가 바뀌기도 전에 게임 화면에 즉시 표시되어야 합니다. 일반적인 방법은 피격 번쩍임입니다. 몇 프레임 동안 적을 온통 흰색으로 그립니다.

번쩍임이 지속될 프레임 수를 저장하는 카운터 하나가 필요합니다. 공격이 맞으면 카운터를 설정하고, 매 프레임마다 값을 낮춥니다.

flash = 0
...
# 피격
hp -= 1
flash = 6
...
# 매 프레임
if flash > 0:
    flash -= 1

그릴 때는 카운터 값에 따라 색을 선택합니다.

if flash > 0:
    pygame.draw.rect(screen, (255, 255, 255), enemy)
else:
    pygame.draw.rect(screen, (220, 80, 80), enemy)

6프레임은 10분의 1초입니다. 눈에 띄기에는 충분히 길고, 다음 공격이 다시 번쩍일 수 있을 만큼 짧습니다. 플레이어는 공격이 적중했음을 한눈에 알 수 있습니다.

이미지가 있는 스프라이트도 같은 방식으로 번쩍이게 할 수 있습니다. 이미지의 흰색 복사본을 준비하거나 복사본을 흰색으로 채운 다음, 카운터가 작동하는 동안 그 이미지를 블릿합니다. 많은 게임에서 플레이어가 피해를 입으면 같은 카운터를 사용해 플레이어를 빨갛게 번쩍이게 합니다.

challenge icon

챌린지

쉬움

스페이스 키를 누르면 빨간 적을 공격하여 HP를 낮춥니다. 공격할 때마다 적이 깜빡이도록 만드세요:

  1. 루프 전에 flash = 0으로 설정합니다.
  2. 공격을 맞히면 flash = 6으로 설정합니다.
  3. 매 프레임마다 flash가 0보다 큰 동안 1씩 줄입니다.
  4. flash가 0보다 큰 동안 적을 흰색 (255, 255, 255)으로 그리고, 그렇지 않으면 빨간색으로 그립니다.

직접 해보기

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Training Dummy")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

hit_sound = pygame.mixer.Sound("assets/sounds/hit.ogg")
player = pygame.Rect(120, 150, 60, 60)
enemy = pygame.Rect(300, 150, 60, 60)
hp = 5

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 and hp > 0:
            hp -= 1
            hit_sound.play()

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), player)
    if hp > 0:
        pygame.draw.rect(screen, (220, 80, 80), enemy)
    label = font.render(f"Enemy HP: {hp}", True, (240, 240, 240))
    screen.blit(label, (300, 110))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz icon실력 점검

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

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

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