Wie soll ich A * neu planen?

10

Ich habe einen wegweisenden Boss-Feind, der den Spieler mit dem A * -Algorithmus sucht. Es ist eine ziemlich komplexe Umgebung, und ich mache es in Flash, so dass die Suche etwas langsam werden kann, wenn über große Entfernungen gesucht wird. Wenn der Player stationär wäre, könnte ich nur einmal suchen, aber im Moment suche ich jeden Frame. Das dauert lange genug, dass meine Framerate leidet.

Was ist die übliche Lösung dafür? Gibt es eine Möglichkeit, A * neu zu "planen", ohne die gesamte Suche zu wiederholen? Sollte ich nur etwas seltener suchen (jede halbe Sekunde oder Sekunde) und akzeptieren, dass der Pfad etwas ungenau ist?

Gregory Avery-Weir
quelle

Antworten:

13

Sie müssen nicht den gesamten Pfad in einem Frame durchsuchen. Ich habe dazu die Suchschleife begrenzt. Die KI folgt dann den wenigen Informationen, die sie enthält, und im nächsten Frame werde ich weitere suchen Es kann 3 Frames dauern, bis der Pfad gefunden wird. Es kann ziemlich überzeugend aussehen, da es so aussieht, als würde die KI tatsächlich suchen.

PhilCK
quelle
+1. Dies beschreibt auch Mat Buckland in seinem KI-Buch. Er nennt es "Zeitscheibenplanung" ( books.google.ch/… ). Gutes Zeug.
Bummzack
8

Sie können die Näherungserkennung verwenden, um den Algorithmus alle paar Frames auszuführen, wenn die Entfernung sehr groß ist (da sich der Zielpfad in den meisten Fällen bei großen Entfernungen nicht drastisch von Frame zu Frame ändert). Zum Beispiel:

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

Dies setzt voraus, dass es einen Abstand gibt, in dem A * für jeden Frame eine Leistung aufweist, die noch akzeptabel ist. Kurz gesagt, ich würde mich für Ihre zweite Option entscheiden. Besonders wenn das, was Sie haben, funktioniert, würde ich es vermeiden, etwas anderes erneut zu implementieren, wenn ich nur reduzieren kann, was gut funktioniert. Das Fazit ist, dass Sie es ausprobieren müssen, um zu sehen, ob es für Ihr Spiel funktioniert.

Nate
quelle
8

Sie beantworten Ihre genaue Frage nicht wirklich, aber ... wenn Sie bereit sind zu "betrügen", können Sie den Spieler dazu bringen, "Brotkrumen" zu verlassen und den Chef ihnen folgen zu lassen. Wenn sich der Breadcrumbs-Pfad kreuzt, folgen Sie dem neuesten (dies vermeidet, dass der Boss Schleifen und andere Pfade vermeidet, die möglicherweise zu lang sind, ganz zu schweigen davon, dass er nicht dem genauen Pfad des Spielers folgt).

Dies würde gut funktionieren, wenn der Chef eine Art Tier mit einem guten Geruchssinn ist. Dies würde sehr ähnlich funktionieren, als würde man dem Geruch des Spielers folgen :)

ggambett
quelle
5

Ihr Fall ist so ziemlich das, wofür HPA * erfunden wurde. Wenn es jedoch wie ein Overkill erscheint, würde ich eher denken, dass die Wegfindung jede halbe Sekunde oder so ziemlich gut funktionieren sollte.

Chaos
quelle
4

Wenn es sich um eine statische Umgebung handelt, können Sie den kürzesten Pfad aller Paare vorberechnen.

Peter Taylor
quelle
2
Wenn es sich um eine kleine statische Umgebung handelt.
Abhängig von der verfügbaren Plattform und dem verfügbaren Speicher.
Nate
@ Joe, @ Nate, stimmt.
Peter Taylor
2

Ich habe ein Spiel für einen 48-Spiele-Wettbewerb erstellt, bei dem ein A * -Zeichen dem Spieler um ein Level folgt. Da meine A * -Implementierung langsam war (sie konnte nicht jeden Frame ausführen), habe ich das Intervall auf drei Sekunden verzögert. Dies hatte das unbeabsichtigte Ergebnis, dass der Spieler die KI für einige Momente "austricksen" konnte. Es hat das Spiel tatsächlich mehr Spaß gemacht.

Später habe ich die Leistung der A * -Implementierung verbessert und versucht, sie auf jedem Frame auszuführen. Das Spiel machte keinen Spaß mehr, weil der Feind den Spieler immer perfekt suchte.

Das war unerwartet und eine gute Lernerfahrung.

GloryFish
quelle
1
Das ist ein guter Punkt. Ich erinnere mich, dass ich über Pfadfindung in Pac-Man gelesen habe, wo sie absichtlich einen unvollkommenen Algorithmus verwendeten, der es dem Spieler ermöglichte, die Geister auszutricksen. Jeder Geist hatte eine etwas andere Unvollkommenheit, die ihm mehr Charakter verlieh. Das Mitnehmen hier ist, dass in Spielen Spaß> alles andere.
Nick Van Brunt
0

Wenn Sie A * nicht unbedingt verwenden möchten (oder müssen), können Sie auch einen Blick auf das Lenkverhalten werfen . Da es keine vollständige Pfadplanung pro Frame gibt, sollte die Verarbeitung wesentlich einfacher sein.


quelle
Ich verwende Lenkverhalten (speziell Suchen) in Fällen, in denen es keine Hindernisse zwischen dem Agenten und seinem Ziel gibt. Leider enthält meine Umgebung Dinge wie das Verdrehen von Korridoren, in denen eine intelligentere Lösung erforderlich ist.
Gregory Avery-Weir