Menu
CoddyTech

Ritagliare uno sprite sheet

Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 25 di 36.

L'animazione è composta da alcune immagini mostrate una dopo l'altra. Spesso i giochi raccolgono queste immagini in un unico file, uno sprite sheet: una griglia di piccoli fotogrammi affiancati. Il codice iniziale disegna per intero assets/sheets/platformer_characters.png, con 9 fotogrammi in orizzontale e 3 in verticale, ciascuno di 24 per 24 pixel. Le due pose di camminata del personaggio verde sono le prime due nella riga in alto.

sheet.subsurface(rect) ti restituisce la parte del foglio contenuta in un Rect, sotto forma di una Surface a sé stante, senza copiare alcun pixel. Il fotogramma numero col nella riga row inizia in (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 pixel sono pochi su una finestra di 640 per 480, quindi ogni fotogramma viene ingrandito di 3 volte, fino a 72 per 72. La pixel art ingrandita di un numero intero mantiene i bordi nitidi. Ritaglia e ingrandisci una sola volta, prima del ciclo, e conserva i fotogrammi in una lista: nelle lezioni successive ne sceglierai uno in base al suo indice.

challenge icon

Sfida

Medio
  1. Prima del ciclo, crea frames: i fotogrammi nelle colonne 0 e 1 della riga superiore, ciascuno di 24 per 24, ingranditi di un fattore 3.
  2. Invece dell’intero foglio, disegna frames[0] in (200, 200) e frames[1] in (368, 200).

Provalo tu

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

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame