2016-06-01 23 views
0

Ich bin mitten in der Entwicklung eines persönlichen Projekts. In diesem Videospiel gibt es ein gitterbasiertes Bewegungs-, Kreations- und Pfadfindungssystem. Zuvor habe ich A * Wegfindung verwendet, um bestimmte Zeichen in Richtung einer bestimmten bekannten Position zu bewegen.Wie finde ich den Weg zu einem bestimmten Objekt, ohne seine Position in einem Grid-basierten Videospiel zu kennen?

Aber jetzt habe ich eine große Frage gestellt. Es gibt einen Charakter in meinem Spiel, der zu einer bestimmten Art von Objekt gehen muss, aber dieser Charakter kennt nicht die genaue Koordinate eines solchen Objekts. Der einfachste Weg, dies zu tun, wäre, die Koordinaten dieser Objekte zu kennen, zu berechnen, welcher der nächste ist, und A * zu verwenden, um zu diesem Punkt zu gelangen, aber dieser Ansatz erscheint wirklich manipuliert und nicht dynamisch genug für den Typ des Spiels, das ich mache.

Also würde ich gerne wissen, ob es einen Wegfindung Algorithmus gibt, der um einen bestimmten Punkt (die Position des Charakters, der diesen Algorithmus verwendet) radial sucht und weiter sucht, bis er den Objekttyp findet das sucht nach und gibt den Pfad zu diesem bestimmten Objekt zurück.

+0

Wie Firststep sagte Verwendung Dijkstra, aber wenn Sie habe bereits eine * heuristik auf 0 gesetzt und du hast Dijkstra. – soncis

+0

Und wenn Ihre Kanten alle gleich schwer sind, können Sie Breathth First Search verwenden, das einfacher und schneller als Dijkstras Algorithmus ist. (Ich habe eine [Tutorial] (http://www.redblobgames.com/pathfinding/a-star/introduction.html), die Breathth First Search zeigt - Sie werden die Early Exit-Zeile ändern, um zu stoppen, wenn Sie das richtige Objekt erhalten anstelle eines bestimmten Ortes) – amitp

Antwort

0

Suchen Sie nach Dijkstra-Algorithmus. Es deckt im Grunde den gesamten Graph ab, bevor der kürzeste Weg zu einem Ziel berechnet wird, im Gegensatz zu A *, das im Voraus zum Zielort führt. Mit anderen Worten, Dijkstra findet ALL die Pfade zu allen Knoten von einer Quelle, wählt dann aber ein Ziel und seinen kürzesten Weg oder die geringsten Kosten. Es gibt ein nettes GIF auf Wiki was ich hier meine: Click und schaue A * auf Wiki um sein GIF zu sehen und diesen Vergleich zu verstehen.

Wie Dijkstra-Algorithmus Ansatz, den kürzesten Weg zu einem Ziel: enter image description here

Wie A * Algorithmus den kürzesten Weg zu einem Ziel nähern:

enter image description here