Ich implementiere derzeit den Silver Cooperative Pathfinding-Algorithmus von David Silver für ein 2D-Spiel mit gitterbasierter Bewegung (alle acht Richtungen).
Das Problem, um das ich mich nicht kümmern kann, ist die Reservierungstabelle in Bezug auf Echtzeit. Ich habe den Algorithmus vollständig in einem eigenen Testfeld implementiert. Meine Implementierung ist jedoch rundenbasiert, wobei sich alle mit der gleichen Geschwindigkeit bewegen.
Das Spiel, in das ich die Gruppenpfadfindung integrieren möchte, hat Echtzeitbewegungen mit Einheiten mit unterschiedlichen Geschwindigkeiten.
Ich habe einige Überlegungen zusammengestellt, die ich berücksichtigen muss, und einige, die mir bei der Umsetzung helfen könnten:
- Feinde suchen nicht den Charakter des Spielers
- Einige feindliche Einheiten werden jedoch wandern
- Gegner haben je nach Feindtyp eine unterschiedliche Bewegungsgeschwindigkeit
- Der Spieler bewegt den Avatar durch Klicken auf das Ziel (dies leitet einen Spaziergang ein).
- Der Spieler kann durch Doppelklicken auf ein Ziel mit dem Laufen beginnen (dies kann zwischen Gitterknoten geschehen).
- Der Spieler hat Verbündete, die dem Avatar folgen
- Verbündete rennen, um mit dem Avatar Schritt zu halten, wenn er zu weit entfernt ist, und beginnen erneut zu laufen, wenn sie nah genug sind (dies kann auch zwischen Gitterknoten geschehen).
- Geschwindigkeiten sind keine perfekten Vielfachen voneinander
Unter Berücksichtigung dieser Faktoren besteht meine derzeitige Teillösung aus Folgendem:
- Aufgrund der Überlegungen 1 und 2 teilen sich die Feinde Reservierungstabellen, da ich sie in denselben Intervallen bewegen kann, damit ihre Zeiten übereinstimmen
- Aufgrund der Überlegungen 3 und 8 unterscheiden sich die Reservierungstabellen der Feinde durch die Bewegungsgeschwindigkeit. Ich denke darüber nach, weil ich nicht sicher bin, wie ich eine Reservierungstabelle für alle verwenden soll, wenn ihre Geschwindigkeiten nicht perfekte Vielfache voneinander sind.
- Aufgrund der Überlegungen zur Geschwindigkeitsänderung von 4, 5, 7 und 8 werden die Pfade der Spieler und Verbündeten neu berechnet, wenn sie zu laufen oder zu laufen beginnen, da dies die Pfadkoordination beeinflusst.
- Da Pfade für den Spieler-Avatar im laufenden Betrieb neu berechnet werden können, muss ich zwei Reservierungstabellen speziell für den Spieler haben (eine für den Spaziergang, eine für den Lauf). Möglicherweise müsste ich auch zwei Reservierungstische haben, die die Verbündeten teilen können (einen für den Spaziergang, einen für den Lauf).
- Aufgrund der Tatsache, dass Pfade zwischen Knoten neu berechnet werden können, muss ich meiner Meinung nach Geschwindigkeitsänderungen so begrenzen, dass sie nur dann auftreten, wenn sich eine Einheit direkt auf einem Knoten befindet, anstatt die Geschwindigkeit zwischen Knoten so ändern zu können, wie sie derzeit funktioniert . Andernfalls müsste ich wohl die Zeit berechnen, die benötigt wird, um den nächsten Knoten zu erreichen, und diese dann auch irgendwie in der Reservierungstabelle nachverfolgen.
Schließlich sind hier Dinge, über die ich mich wundere:
- Ich muss die Reservierungstabelle nicht vollständig verstehen, wenn die Koordinierung der Einheiten so schwierig ist. Wie definiere ich die Zeit eines Knotens in der Raum-Zeit-Karte, wenn nicht um wie lange es dauert, bis eine Einheit von einem Knoten zum anderen gelangt?
- Wird die diagonale Bewegung ein Problem bei der Definition der Zeit eines Knotens in der Raum-Zeit-Karte sein?
- Gibt es eine einfachere Möglichkeit, diese Implementierung zu implementieren, als einen anderen Algorithmus zur Pfadfindung für Gruppen zu implementieren?
- Wenn es einen anderen Pfadfindungsalgorithmus gibt, den Sie empfehlen, bin ich ganz Ohr, aber zu diesem Zeitpunkt in der Entwicklung gibt es höchstwahrscheinlich keine Zeit, etwas Neues zu implementieren, es sei denn, das Codieren und Integrieren in das Spiel würde weniger Zeit in Anspruch nehmen als das Jammen der bereits codierte Algorithmus ins Spiel.
Sie können gerne Vorschläge machen, wie Sie die Bewegung von Feinden, Spielern und Verbündeten geringfügig ändern können, wenn dies die Implementierung erheblich erleichtert. Ich freue mich über jede Hilfe, die Sie anbieten möchten. Vielen Dank für Ihre Zeit!