« Pygame/Introduction au module Surfarray » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 283 :
 
 
Autres fonctions du module surfarray.
There are only a few other functions available in surfarray. You can get a better list with more documentation on the surfarray reference page. There is one very useful function though.
Il existe quelques autres fonctions disponibles dans le module surfarray. Vous pouvez en obtenir une liste exhaustive ainsi qu'une description plus complète sur la page de référence. Notez malgré tout cette fonction très utile :
 
'''surfarray.array_colorkeyblit_array(surface, array)'''
 
This will transfer any type of 2D or 3D surface array onto a Surface of the same dimensions. This surfarray blit will generally be faster than assigning an array to a referenced pixel array. Still, it should not be as fast as normal Surface blitting, since those are very optimized.
 
Ceci va transformer tout type de tableau 2D ou 3D en une surface possédant les mêmes dimensions. Cette fonction surfarray sera généralement beaucoup plus rapide que d'assigner un tableau qui contiendrait les pixels de références. Néanmoins, ça ne devrait pas être plus rapide qu'une animation normale d'image à l'écran, car ceux-là sont très optimisés.
'''traduction incertaine'''
 
=Utilisation plus avancée de Numeric=
 
Voici deux dernière choses qu'il est bon de connaître à propos des tableaux de Numeric. En manipulant des tableau de très grande taille, comme par exemple des grandes surfaces de 640x480, vous devrez veiller à deux choses en particulier.
'''surfarray.array_colorkey(surface)'''
 
D'abord, si, les opérateurs + et * utilisés avec les tableaux sont très pratiques, ils sont également très coûteux en temps de calcul sur les grands tableaux. Ces opérateurs doivent réaliser des nouvelles copies temporaires des tableaux, qui sont alors copiées dans un autre tableau habituellement. Cela peut prendre énormément de temps. Heureusement, le module Numeric fournit certaines fonctions spéciales. Par exemple, vous pourrez remplacer l'opération
 
'''>>> screen[:] = screen + brightmap'''
 
par l'opérateur plus rapide add(screen, brightmap, screen). Lisez la documentation de Numeric Ufunc pour en savoir plus à ce propos. C'est important de savoir bien manipuler les tableaux.
En manipulant des tableaux avec des valeurs de pixel codés sur 16 bits, Numeric n'utilise pas des entiers non signés sur 16 bits, donc certaines de vos valeurs seront des nombres négatifs signés. Heureusement ça ne pose pas de problème.
 
Une autre chose à laquelle il faut veiller en utilisant des tableaux est le type de données manipulé. Quelques tableaux (particulièrement les surfaces de pixels ''mappées'', en codage RGB) utilisent des valeurs sur huit bits non signés. Un dépassement est très facilement généré si vous n'êtes pas attentifs. Numeric utilise le même fonctionnement que le langage C? c'est à dire que d'additionner, par exemple, une valeur sur huit bits et une valeur sur 32 bits va renvoyer un nombre sur 32 bits. Vous pouvez toujours convertir le type d'un tableau, mais soyez toujours certain du type que contiennent les tableaux que vous manipulez. S'il arrive une situation dans laquelle un dépassement de capcité est provoqué, Numeric va lever une exception
Enfin, vous devez faire attention à, en assignant des valeurs dans un tableau de trois dimensions, elles doivent être comprises en tre 0 et 255, où vous allez générer des erreurs de troncatures indéfinies.
 
Enfin, soyez prudent dans vos assignations de tableaux, un dépassement peut générer une erreur de troncature indéfinie.
 
=Remise du Diplôme=
Ok, vous l'avez. Ma formation rapide sur Numeric python et surfarray. Espérons que maintenant vous voyez ce qu'il est possible de faire, et que si l'utilisez à votre tour, vous ne serez pas effrayé pour écrire le code correspondant. Regardez dans les exemples de vgrade pour plus de tableaux numeric en action. Il existe également quelques démonstrations "enflammées" qui utilisent surfarray pour créer un effet de flammes en temps réel.
Le mieux est toujours d'essayer des choses par vous même. Allez y doucement en premier, et augmentez au fur et à mesure. J'ai vu des choses très intéressantes faites avec surfarray comme des gradients radiaux et d'autres choses dans le genre. Bonne chance.