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.
Desafío
Intermedio- 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. - En lugar de dibujar toda la hoja, dibuja
frames[0]en(200, 200)yframes[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
1Cargar imágenes
Cargar una imagenColocarla con un rectánguloMover la imagenRepetir un fondo en mosaicoPíxeles transparentes2Girar, voltear y escalar
Girar alrededor del centroApuntar en la dirección del vueloEscalar una imagenGirar desde la imagen original5Colisiones precisas a nivel de píxel
Los rectángulos parecen injustosMáscarasSprites precisos a nivel de píxelHitboxes circulares3Clases para objetos del juego
Tu primera claseMétodosSelf es el objetoUna lista de objetosObjetos con imágenesUna subclase6Animación con hojas de sprites
Recortar una hoja de spritesUn contador de fotogramasAnimar con el tiempoUna explosión de una sola vezPractica por tu cuenta: Playground de Pygame