Pygame/Modes d'affichage
Paramétrer les modes d'affichage
[modifier | modifier le wikicode]Traduit de l'anglais, document original par ''Pete Shinners'' :
https://www.pygame.org/docs/tut/DisplayModes.html
Introduction
[modifier | modifier le wikicode]La définition du mode d’affichage dans pygame crée une surface d’image visible sur le moniteur. Cette surface peut couvrir tout l'écran ou être fenêtrée sur des plates-formes prenant en charge un gestionnaire de fenêtres. La surface d’affichage n’est rien d’autre qu’un objet surfacique pygame standard . pygame.display
. Le module pygame contient des fonctions spéciales permettant de contrôler la fenêtre d’affichage et le module d’ écran pour maintenir le contenu de la surface de l’image à jour sur le moniteur.
Définir le mode d'affichage dans pygame est une tâche plus facile qu'avec la plupart des bibliothèques graphiques. L'avantage est que si votre mode d'affichage n'est pas disponible, pygame émulera le mode d'affichage que vous avez demandé. Pygame sélectionnera une résolution d'affichage et une profondeur de couleur qui correspondent le mieux aux paramètres que vous avez demandés, puis vous permettra d'accéder à l'écran avec le format que vous avez demandé. En réalité, le pygame.displaymodule pygame permettant de contrôler la fenêtre d’affichage et le module d’ écran constituant une liaison entre la bibliothèque SDL et SDL, SDL effectue tout ce travail.
Il y a des avantages et des inconvénients à régler le mode d'affichage de cette manière. L'avantage est que si votre jeu nécessite un mode d'affichage spécifique, il s'exécutera sur des plates-formes ne prenant pas en charge vos besoins. Cela facilite également la vie lorsque vous commencez quelque chose, il est toujours facile de revenir en arrière et de rendre le choix du mode un peu plus précis. L'inconvénient est que ce que vous demandez n'est pas toujours ce que vous obtiendrez. Il y a aussi une pénalité de performance lorsque le mode d'affichage doit être émulé. Ce didacticiel vous aidera à comprendre les différentes méthodes d'interrogation des capacités d'affichage de la plate-forme et à définir le mode d'affichage de votre jeu.
Définir les bases
[modifier | modifier le wikicode]La première chose à apprendre est de savoir comment définir le mode d'affichage actuel. Le mode d'affichage peut être défini à tout moment après que le pygame.display
pour contrôler la fenêtre d'affichage et le module d' écran ont été initialisés. Si vous avez précédemment défini le mode d’affichage, le ré-activer modifiera le mode actuel. Le réglage du mode d'affichage est géré avec la fonction Initialiser une fenêtre ou un écran pour l'affichage . Le seul argument requis dans cette fonction est une séquence contenant la largeur et la hauteur du nouveau mode d'affichage. L'indicateur de profondeur correspond aux bits demandés par pixel pour la surface. Si la profondeur donnée est 8, pygame créera une surface mappée en couleur. Lorsque la profondeur de bit est plus élevée, pygamepygame.display.set_mode((width, height), flags, depth)
utilisera un mode couleur compacté. Vous trouverez beaucoup plus d'informations sur les profondeurs et les modes de couleur dans la documentation des modules d'affichage et de surface. La valeur par défaut pour la profondeur est 0. Lorsque l'argument 0 est attribué , pygame sélectionne la meilleure résolution à utiliser, généralement identique à la profondeur actuelle du système. L'argument flags vous permet de contrôler des fonctionnalités supplémentaires pour le mode d'affichage. Vous pouvez créer la surface d'affichage dans la mémoire matérielle avec le flag HWSURFACE
. Encore une fois, vous trouverez plus d’informations à ce sujet dans les documents de référence pygame .
Comment décider
[modifier | modifier le wikicode]Alors, comment choisir un mode d’affichage qui fonctionnera le mieux avec vos ressources graphiques et la plate-forme sur laquelle tourne votre jeu? Il existe plusieurs méthodes pour collecter des informations sur le périphérique d'affichage. Toutes ces méthodes doivent être appelées après l’initialisation du module d’affichage, mais vous souhaiterez probablement les appeler avant de définir le mode d’affichage. Tout d'abord, pygame.display.Info()
renverra un type d'objet spécial de VidInfo, qui peut vous en apprendre beaucoup sur les capacités du pilote graphique. La fonction Obtenir la liste des modes plein écran disponibles peut être utilisée pour rechercher les modes graphiques pris en charge par le système. Choisir la meilleure profondeur de couleur pour un mode d’affichage prend les mêmes arguments que pygame.display.set_mode()
, mais renvoie la résolution en bits la plus proche de celle demandée. Enfin, pygame.display.get_driver()
renvoie le nom du pilote graphique sélectionné par pygame .
Rappelez-vous juste la règle d'or. Pygame fonctionnera avec pratiquement tous les modes d’affichage demandés. Certains modes d’affichage devront être émulés, ce qui ralentira votre jeu, car pygame devra convertir chaque mise à jour effectuée en mode "réel". Le mieux est de toujours laisser pygame choisir la meilleure résolution en bits et de convertir toutes vos ressources graphiques dans ce format lors de leur chargement. Vous pouvez laisser pygame choisir sa résolution en appelant set_mode() sans argument de profondeur ou avec une profondeur de 0, ou vous pouvez appeler mode_ok() pour trouver la résolution en bits la plus proche de ce dont vous avez besoin.
Lorsque votre mode d’affichage est fenêtré, vous devez généralement calculer la même profondeur de bits que le bureau. Lorsque vous êtes en plein écran, certaines plates-formes peuvent basculer vers la résolution la plus adaptée à vos besoins. Vous pouvez trouver la profondeur du bureau actuel si vous obtenez un objet VidInfo avant de définir votre mode d'affichage.
Après avoir défini le mode d’affichage, vous pouvez obtenir des informations sur ses paramètres en obtenant un objet VidInfo ou en appelant l’une des méthodes Surface.get * sur la surface d’affichage.
Fonctions
[modifier | modifier le wikicode]Ce sont les routines que vous pouvez utiliser pour déterminer le mode d'affichage le plus approprié. Vous trouverez plus d'informations sur ces fonctions dans la documentation du module d'affichage.
pygame.display.mode_ok(size, flags, depth)
Cette fonction prend exactement les mêmes arguments que pygame.display.set_mode (). Il renvoie la meilleure résolution disponible pour le mode que vous avez décrit. Si cela renvoie zéro, le mode d'affichage souhaité n'est pas disponible sans émulation.
pygame.display.list_modes(depth, flags)
Obtenir la liste des modes plein écran disponibles
Renvoie une liste des modes d'affichage pris en charge avec la profondeur et les indicateurs demandés. Une liste vide est renvoyée lorsqu'il n'y a pas de mode. L'argument flags est défini par défaut sur FULLSCREEN. Si vous spécifiez vos propres indicateurs sans FULLSCREEN, vous obtiendrez probablement une valeur de retour de -1. Cela signifie que toute taille d'affichage convient, car l'affichage sera fenêtré. Notez que les modes listés sont triés du plus grand au plus petit. pygame.display.Info()Créer un objet d'information d'affichage vidéo
Cette fonction retourne un objet avec de nombreux membres décrivant le périphérique d'affichage. L'impression de l'objet VidInfo vous montrera rapidement tous les membres et toutes les valeurs pour cet objet.
>>> import pygame.display
>>> pygame.display.init()
>>> info = pygame.display.Info()
>>> print info
<VideoInfo(hw = 1, wm = 1,video_mem = 27354
blit_hw = 1, blit_hw_CC = 1, blit_hw_A = 0,
blit_sw = 1, blit_sw_CC = 1, blit_sw_A = 0,
bitsize = 32, bytesize = 4,
masks = (16711680, 65280, 255, 0),
shifts = (16, 8, 0, 0),
losses = (0, 0, 0, 8)>
Vous pouvez tester tous ces indicateurs en tant que membres de l'objet VidInfo. Les différents indicateurs de fusion indiquent si l'accélération matérielle est prise en charge lors de la fusion des différents types de surfaces sur une surface matérielle.
Exemples
[modifier | modifier le wikicode]Voici quelques exemples de différentes méthodes pour initialiser l’affichage graphique. Ils devraient vous aider à avoir une idée de la façon de régler votre mode d’affichage.
>>> #give me the best depth with a 640 x 480 windowed display
>>> pygame.display.set_mode((640, 480))
>>> #give me the biggest 16-bit display available
>>> modes = pygame.display.list_modes(16)
>>> if not modes:
... print '16-bit not supported'
... else:
... print 'Found Resolution:', modes[0]
... pygame.display.set_mode(modes[0], FULLSCREEN, 16)
>>> #need an 8-bit surface, nothing else will do
>>> if pygame.display.mode_ok((800, 600), 0, 8) != 8:
... print 'Can only work with an 8-bit display, sorry'
... else:
... pygame.display.set_mode((800, 600), 0, 8)