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.
Desafio
Médio- 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. - Em vez da folha inteira, desenhe
frames[0]em(200, 200)eframes[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
1Carregando imagens
Carregue uma imagemPosicione-a com um RectMova a imagemLadrilhe o plano de fundoPixels transparentes2Girar, Inverter, Redimensionar
Girar em torno do centroFicar de frente para a direção do vooRedimensionar uma imagemGirar a partir do original3Classes para Objetos de Jogos
Sua primeira classeMétodosSelf é o objetoUma lista de objetosObjetos com imagensUma subclasse6Animação com Sprite Sheets
Recorte uma Sprite SheetUm contador de quadrosAnime com o tempoUma explosão de disparo únicoPratique por conta própria: Playground de Pygame