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 -= 6Trois 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.
Défi
Moyen- Écris
class Player(pygame.sprite.Sprite)comme ci-dessus :self.imagecorrespond àship_image, et le milieu du bord inférieur deself.rectse trouve en(320, 470). - Sa méthode
updatedé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. - Crée
player = Player(), appelleplayer.update()à chaque image et afficheplayer.imageà la position deplayer.rectavec 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
1Charger des images
Charger une imageLa placer avec un rectangleDéplacer l’imageRépéter un arrière-planPixels transparents4Sprites et groupes
La classe SpriteGroupesSupprimer avec kill()Détecter avec spritecollideUn groupe contre un autre2Tourner, 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