Menu
CoddyTech

Recortar una hoja de sprites

Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 25 de 36.

Una animación consiste en mostrar varias imágenes una tras otra. Los juegos suelen guardar esas imágenes en un solo archivo, una hoja de sprites: una cuadrícula de fotogramas pequeños colocados uno al lado del otro. El código inicial dibuja assets/sheets/platformer_characters.png completa, con 9 fotogramas de ancho y 3 de alto, cada uno de 24 por 24 píxeles. Las dos poses al caminar del personaje verde son las dos primeras de la fila superior.

sheet.subsurface(rect) te da la parte de la hoja que queda dentro de un Rect, como una Surface independiente, sin copiar ningún píxel. El fotograma número col de la fila row empieza en (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 píxeles son muy pocos en una ventana de 640 por 480, así que cada fotograma se escala por 3 hasta alcanzar 72 por 72. El pixel art escalado por un número entero mantiene sus bordes nítidos. Recorta y escala una sola vez, antes del bucle, y guarda los fotogramas en una lista: las siguientes lecciones elegirán uno mediante su índice.

challenge icon

Desafío

Intermedio
  1. Antes del bucle, crea frames: los fotogramas de las columnas 0 y 1 de la fila superior, cada uno de 24 por 24, ampliados por 3.
  2. En lugar de dibujar toda la hoja, dibuja frames[0] en (200, 200) y frames[1] en (368, 200).

Pruébalo tú mismo

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 las lecciones de Sprites e imágenes

Practica por tu cuenta: Playground de Pygame