Menu
CoddyTech

Découper une feuille de sprites

Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 25 sur 36.

Une animation est constituée de quelques images affichées les unes après les autres. Les jeux regroupent souvent ces images dans un seul fichier, une feuille de sprites : une grille de petites images disposées côte à côte. Le programme de départ affiche en entier assets/sheets/platformer_characters.png, qui contient 9 images de large et 3 de haut, chacune de 24 sur 24 pixels. Les deux poses de marche du personnage vert sont les deux premières de la rangée du haut.

sheet.subsurface(rect) te donne la partie de la feuille située à l’intérieur d’un Rect, sous la forme d’une Surface distincte, sans copier un seul pixel. L’image numéro col de la rangée row commence à (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, c’est minuscule dans une fenêtre de 640 sur 480, alors chaque image est agrandie par 3 pour atteindre 72 sur 72. Agrandi par un nombre entier, le pixel art conserve ses contours nets. Découpe et agrandis les images une seule fois, avant la boucle, puis conserve-les dans une liste : dans les prochaines leçons, tu en choisiras une à l’aide de son index.

challenge icon

Défi

Moyen
  1. Avant la boucle, créez frames : les images des colonnes 0 et 1 de la ligne du haut, chacune de 24 par 24, agrandies par 3.
  2. Au lieu de toute la feuille, dessinez frames[0] à (200, 200) et frames[1] à (368, 200).

Essayez vous-même

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

Toutes les leçons de Sprites et images

Entraînez-vous par vous-même : Playground Pygame