Comment gérer la recherche et le déplacement d'entités dans un grand monde en réseau?

12

entrez la description de l'image iciCompte tenu de l'image ci-dessus avec des tuiles divisées en cases 32x32, j'ai une entité qui est marquée pour "aggro" les joueurs à proximité qui s'en approchent. J'aimerais que ce monstre poursuive idéalement le joueur (et continue de chasser le joueur pendant un certain temps). Actuellement, mon seul mouvement est effectué par un simple interpolateur pour les entités distantes et cela fonctionne parce que les écarts entre les mises à jour des mouvements sont plutôt faibles.

Je ne peux pas simplement dire au client que le monstre veut se déplacer vers la position où il se trouve, car cela entraînera le déplacement de l'entité beaucoup plus rapidement qu'il ne le devrait (cela peut probablement être résolu en utilisant des mathématiques pour l'interpolation co -efficace) mais plus important encore, il ne semble pas réaliste et peut couper les murs! Je ne veux pas simuler l'intégralité du mouvement sur le serveur si cela peut être évité ... bien que je suppose que oui, mais cela ne résoudra toujours pas le problème d'écrêtage. Je soupçonne que la solution implique une recherche de chemin et l'envoi au client de mises à jour périodiques du nœud et de les laisser simuler le mouvement, mais je ne suis pas sûr.

Merci!

Vaughan Hilts
la source

Réponses:

9

Pour un démarrage simple, vous pouvez implémenter des comportements de pilotage . Recherchez spécifiquement les comportements . entrez la description de l'image ici

En plus de rechercher les personnages, vous devez éviter de vous éloigner des obstacles .

entrez la description de l'image ici

Une fois que ces aspects fonctionnent, vous pouvez implémenter des suivis plus intelligents. Cela comprendrait la recherche de chemin. Maintenant, au lieu de se diriger vers leurs ennemis, les ennemis se dirigeront vers chaque nœud sur le chemin qui les mène à leur cible.

Une fois que l'ennemi est "assez proche", vous pouvez passer à des comportements de pilotage entièrement. Puisqu'ils sont moins chers que la recherche de chemin, et vous obtiendrez de bons résultats à courte portée.

La direction vous permettra également de définir des vitesses de virage maximales et des vitesses maximales pour les ennemis.

Le pilotage peut être géré sur le client avec des mises à jour périodiques du serveur pour s'assurer qu'ils sont toujours sur la bonne voie.

MichaelHouse
la source
Cela signifierait-il également simuler le comportement de pilotage sur le serveur ou puis-je logiquement «accrocher» l'entité le long du chemin? Je n'ai pas besoin d'une énorme précision.
Vaughan Hilts
La direction seule devrait être simulée (elle n'est cependant pas très lourde). Cependant, la direction vers les waypoints pourrait être mise à jour sans simulation. Assurez-vous simplement que le client est à portée du waypoint "actuel" et qu'il se dirige vers le waypoint correct comme "prochain". Cela impliquerait un certain accrochage si l'entité était hors piste et soudainement mise à jour.
MichaelHouse
+1 pour une excellente réponse. Merci d'avoir sauvé mes quelques heures.
Md Mahbubur Rahman
1

Je ne peux pas simplement dire au client que le monstre veut se déplacer vers la position où il se trouve, car cela entraînera le déplacement de l'entité beaucoup plus rapidement qu'il ne le devrait (cela peut probablement être résolu en utilisant des mathématiques pour l'interpolation co -efficace)

En fait, c'est simple à faire. La direction du mouvement sera la position cible moins la position actuelle. Tout ce que vous avez à faire est de réduire ce vecteur à la vitesse de déplacement que vous souhaitez réellement. Répétez chaque image.

mais plus important encore, il ne semble pas réaliste et peut couper les murs! Je ne veux pas simuler le mouvement entier sur le serveur si cela peut être évité ...

Vous devez simuler le mouvement sur le serveur. Sinon, comment saurez-vous que tous les joueurs ont le même comportement?

Vous aurez besoin de quelques informations de base. A * est la norme. Vous pouvez calculer un chemin vers la cible, puis suivre ce chemin consiste simplement à définir des vecteurs de mouvement comme ci-dessus. (Ou vous pouvez utiliser des comportements de pilotage comme dans la réponse de Byte56, qui est essentiellement la même chose avec quelques extras ajoutés.)

Kylotan
la source