Outils pour utilisateurs

Outils du site


ateliers:pygamelab:premierefenetre

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ateliers:pygamelab:premierefenetre [2019/01/04 07:48] izawennateliers:pygamelab:premierefenetre [2019/01/19 11:23] (Version actuelle) izawenn
Ligne 1: Ligne 1:
 ====== Ouverture d'une fenêtre Pygame ====== ====== Ouverture d'une fenêtre Pygame ======
 +// par Izawenn //
 ===== près requis ===== ===== près requis =====
 Avant de commencer, assurez vous d'avoir [[ateliers:pygamelab:installation|installer pygame]] Avant de commencer, assurez vous d'avoir [[ateliers:pygamelab:installation|installer pygame]]
-===== Explication du code: =====+===== Ouvrir une fenêtre =====
 Dans un premier temps, je dois importer dans python, la bibliothèque pygame. Dans un premier temps, je dois importer dans python, la bibliothèque pygame.
  
Ligne 46: Ligne 47:
          main()           main() 
                    
-Si je l'exécute j'arrive à ouvrir une fenêtre. Mais seulement pendant environs un dixième de seconde avant la fin du script. +Si je l'exécute j'arrive à ouvrir une fenêtre. Mais seulement pendant environs un dixième de seconde avant la fin du script. 
 + 
 +===== Maintenir la fenêtre =====
  
 Pour maintenir la fenêtre, il va falloir que je crée une [[ateliers:initiationpython:boucles|boucle]]. Pour maintenir la fenêtre, il va falloir que je crée une [[ateliers:initiationpython:boucles|boucle]].
 Comme je ne sais exactement à quel moment je jeux va s'arrêter, je vais choisir une boucle "while"  Comme je ne sais exactement à quel moment je jeux va s'arrêter, je vais choisir une boucle "while" 
 Seulement voila, lorsque l'on utilise une boucle "while", il doit y avoir une condition pour l'arrêter. Seulement voila, lorsque l'on utilise une boucle "while", il doit y avoir une condition pour l'arrêter.
-Dans le cas présent, nous allons dire que lorsque je clique sur la croix de la fenêtre(et oui même ça, ne ce fait pas tout seul). cela arrête la boucle. Ce qui amène à la fermeture de la fenêtre comme nous l'avons vu tout à l'heure.+Dans le cas présent, nous allons dire que lorsque je clique sur la croix de la fenêtre(et oui même ça, ça ne ce fait pas tout seul). cela arrête la boucle. Ce qui amène à la fermeture de la fenêtre comme nous l'avons vu tout à l'heure.
 Pour cela nous allons crée une variable qui prendra la valeur "True" par défaut, et qui prendra la valeur "False" lorsqu'une condition d'arrêt est rempli. Pour cela nous allons crée une variable qui prendra la valeur "True" par défaut, et qui prendra la valeur "False" lorsqu'une condition d'arrêt est rempli.
  
Ligne 58: Ligne 61:
 C'est parti : C'est parti :
  
-Je déclare la variable qui me permet +Je déclare la variable qui me permet qui me permet de maintenir la boucle. 
 +     jeu_en_cours = True 
 + 
 +Ensuite on crée la boucle while : 
 +     while jeu_en_cours: 
 + 
 +Donc tant que la variable jeu_en_cours sera vrai, la boucle maintiendra la fenêtre ouverte. 
 + 
 +Maintenant il vaut définir les conditions d'arrêt 
 +     for event in pygame.event.get():  
 +            if event.type == pygame.QUIT: 
 +                jeu_en_cours = False 
 +Donc si l'on clique sur la petite croix de la fenêtre, la variable jeu_en_cours devient fausse, et la boucle s'arrête. 
 +     if event.type == pygame.KEYDOWN: 
 +                if event.key == pygame.K_ESCAPE: 
 +                    jeu_en_cours = False 
 +Si l'on appuis sur la touche échap, la variable jeu_en_cours devient également fausse, et la fenêtre se ferme de la même façon. 
 + 
 +Avec le code complet, voila ce que ça donne : 
 + 
 +     import pygame 
 +      
 +     def main(): 
 +         pygame.init() 
 +     
 +         taille_ecran = (800, 600) 
 +         ecran = pygame.display.set_mode(taille_ecran) 
 +      
 +         jeu_en_cours = True 
 +      
 +         while jeu_en_cours : 
 +       
 +             for event in pygame.event.get(): 
 +                  if event.type == pygame.QUIT: 
 +                       jeu_en_cours = False 
 +         
 +                  if event.type == pygame.KEYDOWN: 
 +                       if event.key == pygame.K_ESCAPE: 
 +                            jeu_en_cours = False 
 +         
 +         pygame.quit() 
 +      
 +    if __name__ == "__main__": 
 +         main()  
 + 
 +===== Framerate ===== 
 +Bon la nous venons de crée une boucle while qui fait tourner le script "à fond la caisse", c'est à dire autant de fois qu'il le peut. 
 +C'est totalement inutile pour nous, ça gâche des ressources de calcul pour rien. En fait, il nous suffit d'avoir  30 ou 60 boucles par seconde. 
 +Il va donc nous falloir ralentir un peu notre boucle while. 
 + 
 +Il existe plusieurs façon de le faire, mais pygame propose une solution toute faite. 
 + 
 +D'abord je vais crée une constante qui va contenir le nombre de boucle par seconde que je souhaite. Soit 30, soit 60 boucles par seconde. 
 +     FRAMERATE = 30 
 + 
 +Dans le main() avant la boucle while, il faut initialiser le framerate: 
 +     horloge_framerate = pygame.time.Clock() 
 + 
 +Vers la fin de la boucle, demande à pygame d'attendre un peu avant la boucle suivante 
 +     horloge_framerate.tick(FRAMERATE) 
 + 
 +Voila ce que cela donne avec le code complet 
 +     import pygame 
 +     
 +     FRAMERATE = 30 
 +     
 +     def main(): 
 +          pygame.init() 
 +      
 +          taille_ecran = (800, 600) 
 +          ecran = pygame.display.set_mode(taille_ecran) 
 +      
 +          jeu_en_cours = True 
 +      
 +          horloge_framerate = pygame.time.Clock() 
 +      
 +          while jeu_en_cours : 
 +       
 +             for event in pygame.event.get(): 
 +                 if event.type == pygame.QUIT: 
 +                     jeu_en_cours = False 
 +      
 +                 if event.type == pygame.KEYDOWN: 
 +                     if event.key == pygame.K_ESCAPE: 
 +                         jeu_en_cours = False 
 +      
 +             horloge_framerate.tick(FRAMERATE) 
 +              
 +         pygame.quit() 
 +      
 +     if __name__ == "__main__": 
 +         main() 
 + 
 + 
 +{{:ateliers:pygamelab:ouverture_fenetre.gif?600}} 
 + 
ateliers/pygamelab/premierefenetre.1546584510.txt.gz · Dernière modification : 2019/01/04 07:48 de izawenn