Bonjour à tous,
Je suis actuellement entrain de créer un jeu vidéo en python avec la bibliothèque graphique pygame.
J'ai mis en place quelques "animations" qui vont du simple affichage de texte avec des intervalles de temps au déplacement de personnages automatiquement sur la carte.
Pour ce faire j'ai donc besoin de figer le programme plus au moins longtemps entre chaques action (entre chaque pas d'un PNG, j'ai mis un time.sleep de 0,2 secondes)
Voilà un exemple d'une animation très simple d'affichage de texte en décalé :
En revanche je rencontre un problème, si je clic sur la fenêtre ou que je la déplace et parfois même sans avoir rien touché pendant cette animation, le programme se fige complètement jusqu'à ce que l'animation se termine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 self.fond = pygame.image.load('img/map/noir.png') self.texte1 = self.font.render("Vous voilà revenu dans le village de votre enfance.",1,(206,206,206)) self.texte2 = self.font.render("Mais quelque chose est différent...",1,(206,206,206)) self.texte3 = self.font.render("Il y a une odeur âcre dans l'air, une odeur de soufre.",1,(206,206,206)) self.texte4 = self.font.render("La peur se lit dans les yeux des habitants, d'habitude serain.",1,(206,206,206)) fen1.blit(self.fond, (0,0)) pygame.draw.rect(fen1,(3,34,76),(0,568,1024,200)) fen1.blit(self.texte1,(10,580)) pygame.display.flip() time.sleep(2) fen1.blit(self.texte2,(10,610)) pygame.display.flip() time.sleep(2) fen1.blit(self.texte3,(10,640)) pygame.display.flip() time.sleep(2) fen1.blit(self.texte4,(10,670)) pygame.display.flip()
Par exemple si je clic au moment de l'affichage du texte 1, seul ce texte sera affiché et le programme restera figé pendant les 6 secondes restantes avant la fin de l'animation:
voilà une capture d'écran de ce que ça fait :
Le programme "ne repond plus" et l'écran se fige jusqu'à la fin de l'animation.
j'ai essayé de remplacer les time.sleep() par des pygame.time.delay() mais ça ne change rien, avez vous une solution ?
Partager