Pygame pour les zesteurs

Un tutoriel pour vous apprendre à vous servir de pygame, et seulement à partir d'un zeste !

a marqué ce sujet comme résolu.

PyGame fait ça en asynchrone/multi thread ? J’avais le souvenir d’avoir fait un petit jeu et que le temps de traitement de l’animation jouait beaucoup sur le temps de réaction perçu par l’utilisateur. C’était en Terminal alors ça remonte un peu. Je n’avais surement pas bien codé l’ensemble.

J’imagine que ce sera introduit dans la partie du tutoriel, que j’attend avec impatience.

Bon courage pour la suite. Ça me donne envie de retoucher à Python tient !

EDIT : Une question que je me pose aussi : est-il possible de mettre a jour une seule partie de l’écran sans mettre à jour le reste ? J’imagine qu’il faut simplement "bliter" sur un partie de l’écran vu que PyGame (si j’ai bien compris) ne fonctionne qu’avec la superposition d’image ? Et ducoup, une deuxième question me vient : que deviennent les images qui n’apparaissent pas à l’écran et qui ne seront plus utilisées ? Elle sont retirées purement et simplement ?

+0 -0

Oui et non pour l’asynchrone. Pygame ne sert que pour l’affichage, donc si tu veux de l’asynchrone, faudrait le faire toi même avec des async def par exemple (par contre faudra installer pygame via la source, car c’est une feature de python 3.5 si je dis pas de bêtise, or pygame a pas dû etre packagé en .msi/.exe pour py 3.5)

Ensuite, c’est totalement faisable d’avoir des anims qui ne bouffent pas les perfs, faut juste bien jouer avec le dt que tu passes à ta fonction d’update ;)

Mettre à jour une seule partie de l’écran est totalement inutile. Car cela veut dire savoir quelles parties mettre à jour via pygame.display.update(..) à chaque instant. Pygame peut effectivement fonctionner en BUFFERED, mais aussi en simple superposition (mais c’est pas utile en soit de vouloir optimiser en actualiser que un rectangle de taille (x,y) avec x < screen width et y < screen height, parce que tu devras sûrement flip plusieurs coins de ton écran. C’est pas opti en soit, autant tout réactualiser. Ta CG va être contente de seulement modifier quelques milliers de triangles en un seul coup plutot que des paquets de ~200-500 plusieurs fois par frame)

Les images hors de l’écran, c’est pas pygame qui gère ça normalement, c’est directement la SDL qui est en dessous. Si par "images qui n’apparaissent pas à l’écran" tu entends les images que l’on a affiché en dehors de l’écran, je crois bien que la SDL les supprime. A noter que tout de meme afficher quelque chose, dans ou hors de l’écran consommera du temps processeur, donc faut bien gérér ton affichage. Mais si par "images qui n’apparaissent pas à l’écran" tu veux dire des images que l’on a chargé mais que l’on ne blit pas sur l’écran, Pygame ne fait rien dessus, il n’a pas la main tout simplement ! C’est python et son garbage collector qui vont faire un tour pour nettoyer si besoin dans ce cas.

+0 -0

Salut,

Je viens de lire l’ensemble des chapitres du cours, et j’ai quelques remarques à faire :

  • Il faudrait préciser que l’installation sous Linux concerne les distributions Debian et dérivées ;
  • L’installation est présentée comme un processus qui pourrait échouer arbitrairement. S’il y a une erreur lors de l’import pygame, c’est qu’un problème s’est passé plus haut, qui a dû laisser des traces. Il ne suffit pas de recommencer l’installation pour le résoudre ;
  • Je trouve la phase de lancement et la vérification des valeurs retournées par pygame.init() assez chaotiques : on ne voit pas bien ce qui doit être chargé, ce qui peut échouer, et ce qu’il faudra charger manuellement ;
  • Il y a un from pygame locals as const dans un exemple de code du chapitre « Créer une simple fenêtre ». Outre la faute de syntaxe, pourquoi renommer le module en const ?
  • « C’est simplement une question de goût (et aussi d’habitude) », non, c’est une question de sémantique. C’est bien un bool qui doit être utilisé ici, pas un int. Et d’une manière générale il est faux de dire que while continuer est équivalent à while continuer == True (ça n’est valable que dans ce cas où continuer est un booléen) ;
  • « repertoire de l image qui doit etre en .png ou .jpeg » pygame ne gère que ces deux formats par défaut ?
  • Au sujet des image.convert() et image.convert_alpha(), le cours dit qu’il suffit d’appeler ces méthodes pour convertir l’image. Or d’après la documentation, elles créent et retournent une copie de l’image ;
  • Il est bizarre de parler de « pile » pour évoquer un conteneur FIFO. Le terme approprié est plutôt « file » ;
  • « Celui-là ne sera donc pas très utile, car il est déclenché uniquement quand vous devez réactualiser une portion de votre écran », je ne comprends pas, ça n’en fait pas justement un des plus importants ?
  • Je trouve bizarre que tu dessines un rect de la taille de l’écran pour l’effacer, plutôt que d’appeler fill ;
  • Est-ce normal qu’il n’y ait rien dans les examples de code pour temporiser l’application ? Et que tous les éléments soient redessinés à chaque itération ?

« Celui-là ne sera donc pas très utile, car il est déclenché uniquement quand vous devez réactualiser une portion de votre écran », je ne comprends pas, ça n’en fait pas justement un des plus importants ?

Je me suis demandé la même chose sans réellement le soulever… Pour moi, au contraire il est très important, j’imagine dans un soucis de rapidité d’exécution ? Il est surement plus rapide d’actualiser 10x10px plutôt qu’une fenêtre de 400x500px ? Ça peut servir dans certains cas où tu n’as pas besoin de tout actualiser. A moins que PyGame ne soit plus rapide pour cela ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte