Une explosion à déclenchement unique
Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 28 sur 36.
Certaines animations se jouent une seule fois puis se terminent : une explosion affiche explosion_1.png à explosion_4.png, puis disparaît. En tant que sprite, elle peut gérer son propre compteur et se supprimer lorsqu’elle n’a plus d’images :
def update(self):
self.timer += 1
if self.timer == 5:
self.timer = 0
self.index += 1
if self.index == len(explosion_frames):
self.kill()
else:
self.image = explosion_frames[self.index]Chaque explosion a son propre timer et son propre index, ainsi dix explosions déclenchées à des moments différents se jouent chacune depuis le début. Il suffit de modifier self.image : le groupe dessine l’image que le sprite contient à cet instant.
Vérifiez que la fin n’est pas atteinte avant de lire la liste : explosion_frames[4] n’existe pas et, une fois que la dernière image est restée affichée pendant ses 5 frames, kill() retire l’explosion du groupe. Cliquez n’importe où dans la fenêtre pour en déclencher une.
Défi
MoyenAjoutez à Explosion une méthode update : toutes les 5 images, elle passe à l’image suivante de explosion_frames, et après que la quatrième image est restée affichée pendant 5 images, elle appelle self.kill().
Essayez vous-même
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Explosions")
clock = pygame.time.Clock()
explosion_frames = []
for n in range(1, 5):
explosion_frames.append(pygame.image.load(f"assets/images/explosion_{n}.png").convert_alpha())
class Explosion(pygame.sprite.Sprite):
def __init__(self, center):
super().__init__()
self.index = 0
self.timer = 0
self.image = explosion_frames[0]
self.rect = self.image.get_rect(center=center)
explosions = pygame.sprite.Group()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
explosions.add(Explosion(event.pos))
explosions.update()
screen.fill((20, 22, 40))
explosions.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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