Planification de mouvement

Dans de nombreux jeux, vous voulez que les adversaires, les PNJ, les ennemis etc... interagissent avec le joueur et montrent une certaine intelligence lorsqu'ils se déplacent: vous voulez qu'ils évitent les obstacles, planifient les routes et ne tombent généralement pas sur leur chemin! Pour vous aider, GameMaker Studio 2 dispose d'une série de fonctions relatives à la planification de mouvement. Notez que bien qu'ils soient conçus pour des choses comme les ennemis de jeu, ils peuvent être utilisés pour toutes sortes de choses comme créer un passage fluide pour introduire du texte, ou créer des transitions etc... Cependant, quoi que vous choisissiez dans la liste ci-dessous Dans votre jeu, il est à noter que dans de nombreuses situations, un seul ensemble de fonctions ne vous donnera pas une solution parfaite et que vous devrez "mélanger et assortir" les fonctions, en utilisant l'une ou l'autre selon la situation dans votre jeu.

La planification de mouvement dans GameMaker Studio 2 est gérée par les fonctions mp_, elles-mêmes divisées en trois groupes:

Ce type de fonction essaie de calculer un chemin sans collision pour l'instance. Une fois que ce chemin a été calculé, vous pouvez l'assigner à l'instance pour l'atteindre. Le calcul du chemin prendra un certain temps mais après cela l'exécution du chemin sera rapide. Bien sûr, cela n'est valable que si la situation n'a pas changé entre-temps. Par exemple, si les obstacles changent, vous devrez peut-être recalculer le chemin. Notez à nouveau que ces fonctions peuvent échouer et qu'aucun chemin ne peut être trouvé pour l'instance.


Ce sont les fonctions d'évitement de base et bon pour l'IA simple. Ils travaillent en faisant une instance faire un pas vers une position de but particulier tout en essayant d'aller directement si possible, mais en prenant une direction différente si nécessaire. Ces fonctions doivent être utilisées dans l' événement d'étape d'une instance.


Le dernier type de fonction utilise un mécanisme beaucoup plus complexe basé sur une approche basée sur une grille (parfois appelé un algorithme A *). Il sera beaucoup plus efficace de trouver des chemins (même si cela peut encore échouer) et trouvera les chemins les plus courts possibles, mais il nécessite plus de travail de votre part pour le mettre en place.

L'idée globale est la suivante - Tout d'abord, nous créons une grille qui couvre la pièce (ou la partie concernée). Vous pouvez choisir d'utiliser une grille fine, qui sera plus lente, ou une grille grossière, mais les deux devraient être basés sur la résolution de la pièce afin que la recherche de chemin soit aussi précise que possible. Par exemple, si vous avez une pièce de 400x200 pixels, vous pouvez avoir une résolution de grille de 40, ou 20, ou 10... tout dépend de la précision avec laquelle vous voulez que le chemin soit et du traitement que vous voulez que GameMaker faire pour le générer.

Ensuite, pour tous les objets pertinents que nous voulons éviter, nous devons déterminer les cellules de la grille qui se chevauchent (en fonction soit de leurs boîtes englobantes soit de leur sprite précis) et marquer ces cellules comme étant interdites. Ainsi, une cellule sera marquée totalement interdite, même si un obstacle ne se chevauche que partiellement.

Enfin, nous spécifions une position de départ et une position de but, qui doivent toutes deux se trouver dans des cellules libres, et la fonction calcule alors le chemin le plus court possible entre ces deux positions. Le chemin va courir entre les centres de toutes les cellules libres, donc si les cellules sont assez grandes pour que l'instance placée en son centre se trouve complètement à l'intérieur, ce sera un succès. Ce chemin est ensuite assigné à l'instance à suivre en utilisant le path_ les fonctions. Vous devez vous rendre compte de l'importance de la taille des cellules car les cellules doivent être suffisamment grandes pour que l'objet en mouvement placé au centre d'une cellule se trouve complètement à l'intérieur de la cellule. (Faites attention à la position de l'origine de l'objet et sachez que vous pouvez déplacer le chemin si l'origine de l'objet n'est pas en son centre!) D'un autre côté, plus les cellules sont petites, plus il existe de chemins possibles. Si vous faites des cellules trop grandes, les ouvertures entre les obstacles peuvent se fermer parce que toutes les cellules recoupent un obstacle.

L'approche basée sur la grille est très puissante (et est utilisée dans de nombreux jeux professionnels), mais elle nécessite une réflexion approfondie, car vous devez déterminer quelle zone et quelle taille de cellule sont suffisantes pour résoudre le jeu. En outre, vous devez déterminer quels objets doivent être évités et si un contrôle précis est important. Tous ces paramètres influencent fortement l'efficacité de l'approche. Vous devez également décider si c'est réellement nécessaire, car peut-être que l'une des fonctions mp_ les moins coûteuses peut aussi bien faire l'affaire.