Menu
CoddyTech

스프라이트 시트 자르기

Coddy Pygame 여정의 스프라이트와 이미지 섹션에 포함된 레슨. 36개 중 25번째.

애니메이션은 여러 그림을 차례로 보여주는 것입니다. 게임에서는 이 그림들을 하나의 파일인 스프라이트 시트에 모아 두는 경우가 많습니다. 스프라이트 시트는 작은 프레임을 나란히 배열한 격자입니다. 시작 코드에서는 assets/sheets/platformer_characters.png 전체를 그립니다. 가로로 9개, 세로로 3개의 프레임이 있으며, 각 프레임은 24 x 24픽셀입니다. 초록색 캐릭터의 두 가지 걷기 자세는 맨 윗줄의 첫 번째와 두 번째 프레임입니다.

sheet.subsurface(rect)는 픽셀을 복사하지 않고, 시트에서 Rect 안에 해당하는 부분을 독립적인 Surface로 가져옵니다. row행의 col번째 프레임은 (col * 24, row * 24)에서 시작합니다.

frames = []
for col in (0, 1):
    frame = sheet.subsurface((col * 24, 0, 24, 24))
    frames.append(pygame.transform.scale_by(frame, 3))

640 x 480 크기의 창에서는 24픽셀이 너무 작으므로, 각 프레임을 3배로 확대해 72 x 72로 만듭니다. 픽셀 아트를 정수배로 확대하면 가장자리가 선명하게 유지됩니다. 루프를 시작하기 전에 한 번만 잘라서 확대하고, 프레임을 리스트에 보관하세요. 다음 수업에서는 인덱스로 프레임을 선택합니다.

challenge icon

챌린지

중급
  1. 반복문 전에 frames를 만드세요. 맨 윗줄의 0열과 1열에 있는 프레임을 각각 24×24 크기로 가져와 3배로 확대합니다.
  2. 시트 전체 대신 frames[0]을 (200, 200)에, frames[1]을 (368, 200)에 그리세요.

직접 해보기

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Sheet")
clock = pygame.time.Clock()

sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((20, 22, 40))
    screen.blit(sheet, (212, 204))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

스프라이트와 이미지의 모든 레슨

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