nbrignol.fr Ceci est ma contribution au World Wide Web.

Actor Stdio : étape 4 Le héro se déplace en accélérant vers l'endroit qui a été cliqué.

Catégories : jeu vidéo, développement, libNDS, C++.
Publié en 2015.

C'est parti !

Je modifie InputManager pour stocker la position de la souris et des boutons de la souris.

Il faudra problablement modifier un peu (plus tard) pour gérer les multiples pointeurs d'une tablette, mais pour l'instant j'ignore ce problème.

Refactoring

Un peu de ménage : pour commencer, tout ce qui concerne le déplacement au clavier est placé dans la classe KeyboardBehavior.

C'est cette classe KeyboardBehavior et pas l'Actor qui pourra acceder à l'InputManager.

La méthode move de l'acteur ne fera alors qu'appeller la méthode move du comportement.

Pour l'instant le "behavior" est stocké dans l'acteur et inversement. A voir pour ne gérer cela que dans un sens.

Pointeur et boutons

C'est la classe InputManager qui centralise les états des boutons de la souris et les touches du clavier.

Un nouveau comportement : PointerClick

Je peux maintenant ajouter une classe de comportement GotoClick presque identique à celle du clavier, mais qui se base sur la position du pointeur pour avancer.

Multiples comportements

L'acteur va pouvoir avoir plusieurs comportements : Clavier, Souris, etc. Je rajoute donc une classe qui permet d'avoir une collection de comportements. Je crée l'interface que tous les comportements vont implémenter.

Nickel. Sauf que le héros ne se déplace pas en ligne droite.

Le héros ne se déplace pas en ligne droite.

Ligne droite

La solution naïve de se baser sur les points de destination résulte sur un déplacement avec un angle. Il faut utiliser un système plus complexe pour calculer le tracé d'une ligne droite.

Algorithme Breseiham

Algorithme bien connu, il permet de définir une ligne droite dans une grille. J'implémente cet algo dans un nouveau comportement PointerClickBresenhamBehavior. Le principe est de préparer un tableau de points (des Vectors) qui représente la ligne droite, et d'avancer sur ce chemin.

Et voila !

Mission accomplie (j'ai désactivé le dessin du fond pour la capture) !

Version animée.