피격 플래시
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초입니다. 눈에 띄기에는 충분히 길고, 다음 공격이 다시 번쩍일 수 있을 만큼 짧습니다. 플레이어는 공격이 적중했음을 한눈에 알 수 있습니다.
이미지가 있는 스프라이트도 같은 방식으로 번쩍이게 할 수 있습니다. 이미지의 흰색 복사본을 준비하거나 복사본을 흰색으로 채운 다음, 카운터가 작동하는 동안 그 이미지를 블릿합니다. 많은 게임에서 플레이어가 피해를 입으면 같은 카운터를 사용해 플레이어를 빨갛게 번쩍이게 합니다.
챌린지
쉬움스페이스 키를 누르면 빨간 적을 공격하여 HP를 낮춥니다. 공격할 때마다 적이 깜빡이도록 만드세요:
- 루프 전에
flash = 0으로 설정합니다. - 공격을 맞히면
flash = 6으로 설정합니다. - 매 프레임마다
flash가 0보다 큰 동안 1씩 줄입니다. 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()
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
사운드와 게임의 손맛의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드