« Pygame/Introduction à Pygame » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 53 :
* C'est la façon la plus simple d'obtenir une animation de balle rebondissante. On voit au début du code l'importation et l'initialisation du module Pygame, ce qui ne change pas vraiment d'un programme à un autre. Le <tt>import pygame<tt> importe toutes les modules disponibles de Pygame. L'appel de <tt>pygame.init()</tt> initialise chacun de ces modules.
 
* ''AÀ la ligne 8'', une fenêtre graphique est créée par l'appel de <tt>pygame.display.set_mode()</tt>. Pygame et SDL nous simplifie la vie en sélectionnant par défaut les modes graphiques les plus adaptés au matériel graphique. Vous pouvez outrepasser ce mode et Pygame compensera tout ce que le matériel ne peut pas faire. Pygame représente les images comme des objets Surface. La fonction <tt>display.set_mode()</tt> crée un nouvel objet Surface représentant le graphisme actuel à afficher. Tous les dessins que vous faites sur cette surface seront visibles à l'écran.
* ''AÀ la ligne 10'', nous chargeons notre image de balle. Pygame supporte une grande variété de format d'image, comme la bibliothèque ''SDL_image'', les formats pris en compte sont : JPG, PNG, TGA et GIF. La fonction <tt>pygame.image.load()</tt> nous retourne la surface contenant l'image de balle. La surface gardera toutes les propriétés (couleur clé et/ou de transparence alpha) du fichier d'origine. Après le chargement de l'image de la balle, nous créons une variable <tt>ballrect</tt>. Pygame possède un objet très utile nommé <tt>Rect</tt> qui représente une zone rectangulaire. Dans la partie du code chargée de l'animation, nous verrons quel est le rôle des objets <tt>Rect</tt>.
 
* ''AÀ la ligne 13'', notre programme est initialisé et prêt à être lancé. AÀ l'intérieur d'une boucle infinie qui gère les évènements générés par l'utilisateur, le code dessine et fait bouger la balle. Si vous êtes familier avec la programmation de GUI (Graphical User Interface, ou Interface Utilisateur Graphique), vous avez certainement une notion de ce que sont les évènements. Avec Pygame, il s'agit de la même chose. Lorsqu'un évènement se produit, le programme l'intercepte et agit en conséquence. Le premier évènement pris en compte est l'action de quitter le programme. Si cet évènement survient, le programme agit en conséquence en appelant la méthode <tt>sys.exit()</tt>.
 
* Ensuite vient le traitement de l'actualisation de la position de la balle. ''Les lignes 17 et 21'' déplace la variable <tt>ballrect</tt> par sa vitesse courante. Si la balle s'est déplacée à l'extérieur de l'écran, la vitesse de la balle est inversée pour qu'elle reparte dans l'autre sens. Ça ne correspond pas exactement aux lois de Newton, mais ce n'était pas l'objectif de ce premier programme de toute façon.
* ''AÀ la ligne 23'', nous effaçons l'écran en le remplissant de noir. Si vous n'avez jamais travaillé avec des animations, ceci peut vous paraître étrange. Vous pouvez vous demander : ''Pourquoi avons-nous besoin de tout effacer ? Pourquoi n'avons-nous pas juste la balle à bouger sur l'écran ?'', ceci n'est pas vraiment la manière de fonctionner des animations sur ordinateur. Une animation n'est rien de plus qu'une succession d'images, mais cette succession des images est tellement rapide que le cerveau humain voit une animation. <tt>screen</tt> n'est qu'une image que l'utilisateur voit. Si vous n'avez pas pris le temps d'effacer la balle de l'écran, nous pourrions voir la trace de la balle tout en continuant de voir la balle dans ses nouvelles positions.
* ''AÀ la ligne 24'', nous dessinons l'image de la balle sur l'écran. Le dessin de ces images est géré par la méthode <tt>Surface.blit()</tt>. Un blit signifie que l'on copie les couleurs de chaque pixel d'une image sur une autre. Avec la méthode <tt>blit()</tt>, on prend une surface dite ''source'' que l'on applique sur la surface ''destination'', le tout à une position définie.
 
* La dernière chose dont nous avons besoin, est la mise à jour de l'affichage visible. Pygame gère l'affichage avec un double tampon (double buffer). Quand nous avons fini de dessiner, nous faisons appel à la fonction <tt>pygame.display.flip()</tt>. Ceci fait que tout ce que nous avons dessiné sur la Surface screen devient visible. Cette mise en tampon fait que nous sommes sûr de voir des images complètes dessinée à l'écran. Sans cette manipulation par tampon, l'utilisateur verrait l'image se dessiner au fur et à mesure sur son écran.