Menu
CoddyTech

Recorte uma Sprite Sheet

Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 25 de 36.

Animação é uma sequência de imagens exibidas uma após a outra. Os jogos geralmente mantêm essas imagens em um único arquivo, uma folha de sprites: uma grade de pequenos quadros dispostos lado a lado. O código inicial desenha a imagem inteira de assets/sheets/platformer_characters.png, com 9 quadros na horizontal e 3 na vertical, cada um medindo 24 por 24 pixels. As duas poses de caminhada do personagem verde são as duas primeiras da linha de cima.

sheet.subsurface(rect) fornece a parte da folha dentro de um Rect, como uma Surface própria, sem copiar nenhum pixel. O quadro de número col na linha row começa em (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))

24 pixels é muito pequeno em uma janela de 640 por 480, então cada quadro é ampliado em 3 vezes, para 72 por 72. A pixel art ampliada por um número inteiro mantém as bordas nítidas. Recorte e amplie uma vez, antes do loop, e mantenha os quadros em uma lista: nas próximas lições, você escolherá um deles pelo índice.

challenge icon

Desafio

Médio
  1. Antes do loop, crie frames: os quadros nas colunas 0 e 1 da linha superior, cada um com 24 por 24, ampliados em 3 vezes.
  2. Em vez da folha inteira, desenhe frames[0] em (200, 200) e frames[1] em (368, 200).

Experimente você mesmo

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()

Todas as lições de Sprites e imagens

Pratique por conta própria: Playground de Pygame