Penser en 16,7 millièmes de seconde

Lors d’une discussion avec un camarade indie développeur (!) il y a quelques temps, nous abordions le sujet de la  »game loop » et comment elle nous avait obligé à changer notre façon de penser.  Ou plutôt, comment nous avions eu une certaine difficulté à changer notre façon de penser!

Le code d’un jeu vidéo est une seule et immense boucle.  Dans le meilleur des mondes, cette boucle sera répétée 60 fois à toutes les secondes.  Cela signifie que le processeur repassera à travers tout le code, et dessinera tous les éléments du jeu présents à l’écran à tous les 16,7 millièmes de seconde.  La vitesse à laquelle un processeur pour digérer de l’information est astronomique et donne un peut le tournis.  À tous les 16,7 millièmes de seconde, l’ordinateur vérifie la position des éléments du jeu, vérifie s’il y a des  »inputs » provenant du clavier, de la souris ou de la manette de jeu, il s’assure que le son adéquat sort des hauts-parleurs, et redessine aussi les éléments à l’écran en fonction des règles établies par l’engin (sprites, effets, particules, ombres et lumières, éléments de l’interface de jeu tel le pointage et barres d’énergie).  Et étrangement, ça fonctionne…

Tout ça va tellement vite, qu’un humain ne peut tenter de raisonner toutes ces commandes en temps réel.  Le développeur doit faire exactement le contraire pour parvenir à s’y retrouver.  Il faut ralentir le tempo, il faut penser en 16,7 millièmes de seconde.  Il faut penser un seul tour de boucle, un seul cycle, et s’assurer qu’il ne se contredise pas et qu’il couvre tous les angles, toutes les possibilités.

Et là réside la difficulté.  Il faut se sortir de la peau du joueur qui voit le spectacle en mouvement, et s’installer confortablement dans un monde statique et figé.  Une seule  »frame » des fameuses  »frames per seconde ».

Un cas classique, à titre d’exemple (et qui était justement la base de notre discussion d’il y a quelques temps) : je veux déplacer le héros de mon jeu vers la droite.  Je programme donc le jeu pour qu’il déplace le personnage d’une petite distance vers la droite lorsque la flèche droite du clavier se fait enfoncer.  On démarre le jeu et… le héros ne bouge pas d’un iota, ou pire, il disparaît!  Je vérifie, et oui, je demande effectivement au héros de se déplacer.  Ça veut dire que quelque part, dans mon programme qui ne dure que quelques millièmes de seconde, je contredis cette commande et ramène le personnage à son emplacement initial!  Et ça va tellement vite que ça ne parait pas à l’écran.

Bordel…

Reste à déboguer maintenant.  Tranquillement.

À 16,7 millièmes de seconde …

Laisser un commentaire