Mein Spiel beinhaltet ein Level mit verformbarem Gelände und Einheiten, die sich in jede Richtung bewegen können, aber durch unebenes Gelände verlangsamt werden. Normaler A-Stern sollte in den meisten Fällen gut funktionieren, außer auf flachem Land, wo unabhängig davon, wie der Allzweck-Pfadfinder funktioniert, keine Einheiten auf einen direkten Pfad gesendet werden. Theta-Stern würde funktionieren, wenn das gesamte Level ziemlich flach wäre, wäre aber viel langsamer, wenn es anfänglich unebenes Gelände berücksichtigen müsste.
Ich denke, ein Manhattan-Distanz-Basis-A-Stern-Algorithmus wäre schnell und würde einen ausreichend guten Hinweis geben, damit andere Wegfindungs- oder Steuerungsalgorithmen die Kontrolle übernehmen können, aber ich bin mir nicht sicher, welche Art von Algorithmus ich verwenden soll, um nach vorne zu schauen und wann zu entscheiden Um den Pfad zu verlassen, nehmen Sie einen direkteren Weg und springen Sie später auf den Pfad zurück.
(Theta-Stern scheint zu ineffizient zu sein, wenn er angepasst würde, um Dinge wie Hänge, Hindernisse oder Straßen zu berücksichtigen. Siehe die vorgeschlagene Lösung für den Kommentar zur Vermeidung von Minenfeldern unter: http://aigamedev.com/open/ Tutorials / Theta-Stern-beliebige-Winkel-Pfade / )
Bearbeiten: Ich habe nicht erwähnt, dass ich A-Star bereits in einem ähnlichen Raster implementiert und getestet habe. (Ich glaube, ich habe in dieser Frage versehentlich etwas gelöscht.) Einige der offensichtlicheren Kosten- / Heuristikfunktionen, die ich in Betracht gezogen habe, führen einfach nicht zu realistischen Pfaden in einem Raster, wenn ein Hindernis den direktesten Pfad blockiert (im Grunde genommen, wenn die Pfadfindung nützlich ist ) ( Beispielbilder ). Die vom Theta-Stern-Algorithmus verwendete Änderung der Kostenfunktion scheint eine ideale Lösung zu sein (unter Berücksichtigung der Einschränkungen bei der Verwendung eines Rasters), geht jedoch davon aus, dass Kacheln die gleichen Reisekosten haben (und dies viel länger dauert).
Meine ursprüngliche Überlegung hinter der Verwendung der Manhattan-Entfernung bestand darin, den "Eckschnitt" -Algorithmus vom Pfadfindungsalgorithmus auszulagern, da es wichtiger war, einen schnellen Pfadfindungsalgorithmus zu haben, falls sich das Hindernislayout oder das Gelände ändert. Es ist sinnvoller, den "Eckenschneid" -Algorithmus einmal beim Eintreffen der Einheit durchzuführen, als bei jeder Permutation jeder Suche nach einem Pfadfindungsalgorithmus (dessen Ergebnisse möglicherweise ohnehin verschrottet werden). Eine Suche mit vier Nachbarn mit Manhattan-Entfernung ist auch deshalb interessant, weil Sie Kästchen mit alternativen Pfaden sehen und rechtwinklige Dreiecke identifizieren können, die aus dem ursprünglichen Pfad und dem kürzesten Pfad bestehen.
Eine bessere Frage wäre gewesen: "Was ist ein schneller Weg, um Verknüpfungen in einem Pfad mit 90-Grad-Kurven zu identifizieren?"