스프라이트 시트 자르기
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로 만듭니다. 픽셀 아트를 정수배로 확대하면 가장자리가 선명하게 유지됩니다. 루프를 시작하기 전에 한 번만 잘라서 확대하고, 프레임을 리스트에 보관하세요. 다음 수업에서는 인덱스로 프레임을 선택합니다.
챌린지
중급- 반복문 전에
frames를 만드세요. 맨 윗줄의 0열과 1열에 있는 프레임을 각각 24×24 크기로 가져와 3배로 확대합니다. - 시트 전체 대신
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 플레이그라운드