Mon grand, tu a commencé la programmation en Python. Excellent choix, vraiment. Ce n’est pas celui que j’aurai fait, mais uniquement parce que je suis un vieux grincheux qui fait de l’urticaire devant des espaces signifiants.
Tu a commencé à programmer un jeu de type plate-forme en 2D, et c’est très bien. Et pour arriver à cela, tu as commencé à penser aux déplacements de ton personnage. Ainsi donc pourvu de ton but, tu as redécouvert :
L’intégration numérique.
Ca claque, comme nom, hein ? Ca en jette, c’est stylé.
Mais on ne sait pas ce que c’est.
Alors, pour déplacer, mettons un bonhomme, sur un écran, on peut le déplacer par bonds. C’était la première méthode utilisée dans les jeux vidéo, c’est le truc le plus intuitif. Quand j’appuie sur la flèche droite, j’ajoute, mettons 5, à sa position horizontale, et puis c’est marre. Quand j’appuie sur la flèche gauche, j’enlève 5 et on a fait les 2 côtés à la même vitesse et puis voilà.
Ca marche très bien, et ça donnait ce délicat mouvement hyper saccadé et ingérable des mauvais premiers jeux vidéos.
L’autre possibilité, c’est que l’appui sur une touche ne modifie pas la position du bonhomme, mais sa vitesse. Et là c’est autre chose. Là on fait de l’intégration numérique.
Qu’est-ce que la vitesse ? Hé bien, la vitesse, c’est la distance que tu parcours en une seconde. C’est une distance divisée par un temps. 1 mètre par seconde, qui fait donc 60 mètres par minute, soit 3,6 km/h pour peu qu’on sache multiplier par 60.
Donc, quand tu appuies sur une touche, tu donnes la vitesse de ton personnage. Et quand tu arrêtes d’appuyer, formidable, tu ne donnes plus la vitesse à ton personnage. Sa vitesse évoluera selon des paramètres extérieurs, comme la texture du sol, par exemple. Dans la colle il s’arrêtera vite, sur une patinoire… ça mettra plus de temps. Bon, au pire on mettra des murs pour ne pas qu’il traverse le niveau « Reine des neiges » en 5′ 7.
Très bien, me diras-tu fort justement, mais comment transformé-je cette vitesse en position sur l’écran ? Parce que moi, observeras-tu, je dois afficher mon bonhomme à une certaine position qui bouge tout le temps, pas à une certaine vitesse globalement constante.
Et oui. Et donc, à chaque image, on veut transformer une vitesse – qui est une distance divisée par un temps, en distance (une coordonnée, c’est une distance par rapport à un point de référence). Et pour transformer une distance divisée par un temps en distance pas divisée, et bien… il faut multiplier par ce qu’on divise, c’est à dire un temps. Une vitesse multipliée par un temps, c’est une distance ! J’ai nagé une demie heure à 2,4 km/h, ça fait 2,4 km/h * 0,5 h = 2,4 km/h * 1/2 h = 1,2 km/h*h = 1,2 km tout court ! J’ai nagé 1,2 km.
A chaque image, donc, tu ajoutes à la position de ton personnage sa vitesse, multipliée par le temps écoulé depuis l’image précédente. Cette opération de multiplication par le temps écoulé s’appelle une intégration numérique.
L’intégration numérique est la base fondamentale de la simulation sur ordinateur. Cette idée de multiplier une vitesse par un temps s’applique à beaucoup, beaucoup de grandeurs physiques. Un poids sur une surface, c’est une pression, par exemple. Une pression multipliée par une surface va donc pouvoir te ramener à un poids, ce poids probablement à une masse, et cette masse, via la densité (c’est une masse divisée par un volume), te donnera un volume, par exemple.
Le secret, c’est qu’à chaque image, entre deux courts instants, la vitesse va pouvoir évoluer. Et ces variations de vitesse seront ainsi appliquées à la position, qui intégrera conséquemment toutes ces variations. Elle intégrera toutes ces variations… C’est une intégration… Et comme ce n’est pas fait avec des formules mathématiques, mais directement avec les nombres, c’est une intégration numérique.
C’est ça, l’intégration numérique : c’est appliquer par petits bouts toutes les modifications quand elles apparaissent, pour les intégrer dans le résultat final. C’est ce que tu fais quand tu appliques la vitesse à la position de ton bonhomme de jeu vidéo…
Allez, zou, au turbin !