2 – Création du personnage (suite)
b. Gestion du clavier
À chaque appui sur une touche du clavier, Processing fait appel à la fonction keyPressed( ), et donne accès à la touche dans la variable keyboard.key (key tout court dans l’EDI) du type string.
À chaque fois qu’on lâche une touche du clavier, Processing fait appel à la fonction keyReleased( ), et donne encore accès à la touche dans la variable keyboard.key (key tout court dans l’EDI) du type string.
Nous avons rajouté deux attributs au personnage, self.dx et self.dy, qui contiennent, en pixels, les déplacements en abscisse et ordonnée du personnage à chaque nouvelle image (frame).
Nous lui avons également rajouté une méthode update( ) qui va s’occuper de mettre à jour les coordonnées du personnage.
Dans la fonction draw( ), il faudra donc appeler à chaque fois perso.update( ) puis perso.affiche( ).
Examinons ce que cela donne (pensez à cliquer dans la fenêtre du jeu puis utilisez les touches q et d pour déplacer le personnage) :
Nous allons rajouter la possibilité pour le personnage de sauter.
Sans transition, voici une proposition de code, les modifications sont expliquées en commentaire :
Exercice :
- Modifier le code ci-dessus pour que le personnage accélère encore plus lorsqu’on reste appuyé sur la touche q ou d.
- Modifier le code pour que le personnage saute plus haut lors de l’appui sur la touche espace.
Remarques importantes sur le code :
- Les mouvements du personnage sont dépendants de la fréquence d’images (frameRate) c’est à dire du nombre d’images par seconde. Dans Processing, cette fréquence d’images est fixée à 50 images par seconde (ou fps) et le programme fera sont possible pour en être le plus proche possible. Malheureusement, tout cela est dépendant de la machine sur laquelle le programme est exécuté, et encore plus lorsqu’il est exécuté dans un navigateur comme c’est le cas sur cette page. Cela sera déterminant surtout lorsque nous ajouterons des images …
- L’implémentation de la gravité n’est pas du tout réaliste (au sens de la Physique). Le but est de produire un mouvement de type jeu vidéo « cartoon ».
Pour une implémentation d’une gravité plus réaliste et indépendante de la fréquence d’images, vous pouvez consulter, entre autres, la discussion (en anglais) suivante sur le forum gamedev de stackexchange. C’est un sujet de discussion très fréquent sur les forums de développeurs.