« Pygame/Guide du débutant » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 55 :
Comment devez-vous utiliser <code>convert()</code> ? Appelez-la après avoir créé une surface avec la fonction <code>image.load()</code>. Au lieu de faire :
 
<sourcesyntaxhighlight lang="python">
surface = pygame.image.load('foo.png')
</syntaxhighlight>
</source>
 
Privilégiez :
 
<sourcesyntaxhighlight lang="python">
surface = pygame.image.load('foo.png').convert()
</syntaxhighlight>
</source>
 
C'est simple, vous avez besoin de ne l'appeler qu'une seule fois par surface, lorsque vous chargez votre image depuis le disque et vous serez enchanté des résultats. J'ai remarqué un gain de performance sur les blits de l'ordre de 6x en utilisant la fonction <code>convert()</code>.
Ligne 123 :
L'enveloppe de Pete Shinner (Pygame) peut fournir de beaux effets de transparence et de bonnes vitesse de blit mais je dois admettre que ma partie préférée de Pygame est la modeste classe <code>Rect</code>. Un <code>rect</code> est un simple rectangle, défini par la position de son coin supérieur gauche, sa largeur et sa hauteur. Beaucoup de fonctions de Pygame prennent des <code>rects</code> en arguments ou des styles de <code>rects</code>, ou encore des séquences qui ont les mêmes valeurs qu'un <code>rect</code>. Ainsi, si je veux un rectangle qui définit une zone entre 10, 20 et 40, 50, je peux faire une des choses suivantes :
 
<sourcesyntaxhighlight lang="python">
rect = pygame.Rect(10, 20, 30, 30)
rect = pygame.Rect((10, 20, 30, 30))
Ligne 129 :
rect = (10, 20, 30, 30)
rect = ((10, 20, 30, 30))
</syntaxhighlight>
</source>
 
Si vous utilisez une des trois premières versions, quelle qu'elle soit, vous aurez accès aux fonctions utilitaires des <code>Rects</code>. Elles incluent les fonctions de déplacement, de diminution et d'agrandissement des <code>rects</code>, de recherche de l'union de deux <code>rects</code>, et d'une variété de fonctions de détection de collision.
Ligne 135 :
Par exemple, je suppose que j'aimerais obtenir une liste de tous les sprites qui contiennent le point <code>(x, y)</code>, peut-être que le joueur a cliqué ici, ou peut-être est-ce l'emplacement actuel d'une balle. C'est très simple si chaque sprite possède un attribut <code>rect</code>, je n'ai qu'à faire :
 
<sourcesyntaxhighlight lang="python">
sprites_clicked = [sprite for sprite in toute_ma_liste_de_sprites if sprite.rect.collidepoint(x, y)]
</syntaxhighlight>
</source>
 
Les <code>Rects</code> n'ont avec les surfaces ou les fonctions graphiques aucune autre relation que le fait de les utiliser comme arguments. Vous pouvez les utiliser à des endroits qui n'ont rien à voir avec le graphisme mais que vous avez besoin de définir comme des rectangles. À chaque projet, je découvre de nouvelles façons d'utiliser des <code>rects</code>, là où je n'avais jamais pensé en avoir besoin.
Ligne 160 :
Il existe des avantages et des inconvénients pour chaque système. Le contrôle d'état (système 1) vous donne la précision : vous savez exactement quelle entrée a été effectuée ; si <code>mouse.get_pressed([0])</code> est vrai, cela signifie que le bouton gauche de la souris est actuellement enfoncé. La file d'évènements, elle, ne fait que rapporter que le bouton de la souris a été enfoncé à un certain moment dans le passé. Si vous vérifiez la file relativement souvent, ça fonctionnera, mais si vous tardez à la consulter, la latence peut s'agrandir. Un autre avantage du système de contrôle d'état est qu'il détecte facilement les ''accords'' de touches, qui sont plusieurs états au même moment. Si vous voulez savoir si les touches {{Touche|T}} et {{Touche|F}} sont pressé en même temps, il suffit de vérifier :
 
<sourcesyntaxhighlight lang="python">
if (key.get_pressed[K_t] and key.get_pressed[K_f]):
print "Yup!"
</syntaxhighlight>
</source>
 
Toutefois, dans le système de file, chaque pression de touche entre dans la file comme un évènement complètement séparé ; ainsi, vous devez vous rappeler que la touche {{Touche|T}} est enfoncée et n'a pas encore été relâchée lorsque vous contrôlez l'état de la touche {{Touche|F}}. Un peu plus complexe.