Menu
CoddyTech

La classe Sprite

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

Jusqu’ici, chaque objet du jeu avait une image, un Rect, une méthode update et un moyen d’être dessiné. pygame possède une classe conçue précisément pour cela : pygame.sprite.Sprite. Vos objets de jeu en deviennent des sous-classes :

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = ship_image
        self.rect = self.image.get_rect(midbottom=(320, 470))

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 6

Trois règles. Appelez d’abord super().__init__() : cela initialise ce dont la classe Sprite a besoin en interne. Nommez l’image self.image et la position self.rect, exactement ainsi : le code de pygame lit ces deux noms. Placez les règles appliquées à chaque image dans update.

L’image du vaisseau est chargée une seule fois en haut, sous le nom ship_image, et la classe l’utilise. Pour l’instant, dessinez le sprite avec un blit : screen.blit(player.image, player.rect). La prochaine leçon laissera pygame le dessiner.

challenge icon

Défi

Moyen
  1. Écris class Player(pygame.sprite.Sprite) comme ci-dessus : self.image correspond à ship_image, et le milieu du bord inférieur de self.rect se trouve en (320, 470).
  2. Sa méthode update déplace le Rect de 6 pixels vers la gauche ou vers la droite avec les flèches et le maintient dans la fenêtre : déplace les lignes du code de départ dans cette méthode.
  3. Crée player = Player(), appelle player.update() à chaque image et affiche player.image à la position de player.rect avec blit.

Essayez vous-même

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Ship")
clock = pygame.time.Clock()

ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship_image.get_rect(midbottom=(320, 470))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        ship_rect.x -= 6
    if keys[pygame.K_RIGHT]:
        ship_rect.x += 6
    ship_rect.clamp_ip(screen.get_rect())

    screen.fill((20, 22, 40))
    screen.blit(ship_image, ship_rect)
    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