Python >> Tutoriel Python >  >> Python GUI >> Pygame GUI

Comment augmenter la fréquence d'images (fps) dans Python + Pygame ?

Laissez les événements venir à vous avec event.wait

Avez-vous vraiment besoin de traiter chaque tick ? Sinon, utilisez pygame.event.wait pour que votre boucle d'événements ne traite que lorsqu'un événement arrive, et pygame.time.set_timer si vous avez besoin d'événements périodiques comme votre SecondEvent .

Cela signifie que vous ne dessinerez pas beaucoup d'images pendant des secondes lorsque les événements n'arrivent pas, mais ce n'est pas grave. L'utilisation de event.wait réduira l'utilisation du processeur et vous permettra de rester réactif, et supprimera probablement le besoin du time.wait que vous avez à la place.

Ne redessinez pas tout le tableau à chaque tick

Ne laissez pas Room.render blit l'arrière-plan à chaque fois, ce qui signifie qu'il doit ensuite parcourir et redessiner tout le tableau et toutes les cartes. Faites-le une fois. Dans ce cas, les cartes ne se restituent pas à moins qu'elles ne changent d'obscurité ou qu'elles ne se déplacent.

Lorsque les cartes bougent, vous devriez être en mesure de restaurer l'arrière-plan en blitant juste une partie du graphique d'arrière-plan au lieu de tout.

Passez une liste de rectangles à display.update

Une fois que vous ne mettez à jour que certaines zones, vous pouvez transmettre ces zones à display.update il n'a donc pas besoin de mettre à jour tout l'écran. Pour un exemple, voir le code Solarwolf et comment il marque les rectangles sales.


Sur les résultats de votre profil :

J'ai récemment découvert que vous ne devriez mettre à jour que les zones de l'écran qui ont changé, mais je ne sais toujours pas comment cela a été fait exactement... cela pourrait-il être un énorme problème de performances ?

Oui. display.update et Surface.blit sont en haut des résultats de votre profil. Vous avez fait plus d'un million de blits, en environ 5000 ticks, ce qui équivaut à 200 blits à chaque tick.

De plus, le sixième sur les résultats de votre profil est display.set_caption , qui je suppose est l'affichage du compteur FPS lui-même ? À 7 secondes de 157, ce n'est pas votre point d'accès principal, mais il est toujours intéressant de le savoir.