Un compteur de frames
Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 26 sur 36.
Le personnage traverse la fenêtre, mais ses jambes ne bougent jamais : il affiche toujours frames[0]. Afficher l’autre image à chaque fois provoquerait un clignotement 60 fois par seconde, beaucoup trop rapide pour les jambes. Garde plutôt chaque image pendant quelques images, à l’aide d’un compteur :
timer += 1
if timer == 10:
timer = 0
frame_index = (frame_index + 1) % len(frames)timer compte les images. Toutes les 10 images, il revient à 0 et frame_index passe à l’image suivante. % len(frames) le ramène à 0 après la dernière image, de sorte que la marche tourne en boucle indéfiniment, quel que soit le nombre d’images de la liste.
Dessine frames[frame_index]. À 60 images par seconde, chaque pose s’affiche pendant un sixième de seconde : une marche tranquille. Un nombre inférieur à 10 accélère le mouvement des jambes.
Défi
Moyen- Avant la boucle, initialise
frame_index = 0ettimer = 0. - À chaque image, ajoute 1 à
timer; lorsqu’il atteint 10, remets-le à 0 et passeframe_indexà l’image suivante, en revenant au début avec% len(frames). - Dessine
frames[frame_index]à(x, 300).
Essayez vous-même
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Walk Cycle")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (0, 1):
frame = sheet.subsurface((col * 24, 0, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))
x = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
x += 2
if x > 640:
x = -72
screen.fill((20, 22, 40))
screen.blit(frames[0], (x, 300))
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