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.
Défi
Moyen- 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. - Au lieu de toute la feuille, dessinez
frames[0]à(200, 200)etframes[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
1Charger des images
Charger une imageLa placer avec un rectangleDéplacer l’imageRépéter un arrière-planPixels transparents2Tourner, retourner, redimensionner
Faire pivoter autour du centreRegarder dans la direction du volRedimensionner une imagePivoter à partir de l’original5Collisions au pixel près
Les rectangles semblent injustesMasquesSprites au pixel prèsZones de collision circulaires3Les classes pour les objets du jeu
Votre première classeLes méthodesSelf est l’objetUne liste d’objetsDes objets avec des imagesUne sous-classe6Animation à partir de feuilles de sprites
Découper une feuille de spritesUn compteur de framesAnimer avec le tempsUne explosion à déclenchement uniqueEntraînez-vous par vous-même : Playground Pygame