Comment pouvons-nous faire en sorte que notre personnage se déplace en douceur sur les tuiles? Il déplace carreau par carreau, mais cela ne semble pas professionnel. De plus, lorsque vous maintenez les touches fléchées enfoncées, il zippe sur l'écran. Comment pouvons-nous empêcher que cela se produise?
8
Réponses:
Un mouvement fluide peut être réalisé de plusieurs façons. Et cela dépend vraiment du type de mouvement que vous souhaitez autoriser.
Pseudo code:
Où
MoveTowards
prend simplement la position actuelle et ajoute une partie de la distance entre elle et la position cible.Maintenir les touches fléchées pour déplacer les personnages peut également être implémenté de différentes manières. Ce que vous faites est probablement quelque chose comme:
Cela ferait en effet glisser le personnage sur l'écran. Puisque vous mettriez à jour la position plusieurs fois par seconde. Une meilleure façon de mettre en œuvre ce serait d'ajouter un délai. Quelque chose comme
Cela ajoutera une minuterie de retard et ne mettra à jour la position de la tuile que lorsque la
movementDelay
valeur aura été atteinte.la source
Je peux identifier deux problèmes. Le premier concerne le mouvement fluide et le second est lié à la fermeture éclair du personnage.
Pour créer un mouvement fluide, vous pouvez utiliser une technique appelée interpolation linéaire ou (LERP) pour lisser le mouvement. Fondamentalement, comment cela fonctionne entre votre point de départ et votre point d'arrivée, vous calculez un ensemble de distances de plus en plus petites pour émuler un mouvement fluide et ralentir lorsque le point final est presque atteint.
L'exemple le plus simple de cette fonction serait:
À mesure que le personnage se rapproche du point 2, il ralentira progressivement. Notez bien qu'ils ne toucheront jamais le point 2 mais se rapprocheront infiniment. Vous devrez corriger cela et si le joueur est à moins d'une distance infiniment petite du point 2, nous pouvons considérer que le joueur est au point 2.
Le deuxième problème que vous avez mentionné est lié au fait que votre personnage vole hors écran. Ceci est le résultat de la lecture de l'entrée à chaque rafraîchissement de la boucle de jeu combinée au mouvement instantané entre les tuiles.
Idéalement pour résoudre ce problème, dans votre code, vous devez décider
la source