Ja. Ein * ist in fast allen Fällen immer noch der richtige Weg. Es ist Ihre Knotenkostenberechnung, die dynamisch wird und daher komplexer zu berechnen und zu verfolgen ist.
Wenn Sie bereits wissen, wo sich die sich bewegenden Hindernisse in Zukunft befinden werden, kann Ihr A * die Zeitlichkeit von Hindernissen in der Kostenfunktion berücksichtigen.
ZB: Dieser Knoten wird in 4 Ticks erreicht, belegt von Tick # 3 bis Tick # 6, sodass die Reisekosten für diesen Knoten 6 - 4 = +2 Ticks betragen. Das ist vielleicht immer noch der beste Weg.
Die Fahrtrichtung des Hindernisses muss ebenfalls berücksichtigt werden.
Wenn Sie es nicht im Voraus wissen, können Sie keine Hindernisse annehmen und den Pfad neu berechnen, wenn Hindernisse erreicht sind, aber Sie müssen etwas gegen Deadlocks und Livelocks unternehmen. (Gleiches gilt, wenn Sie vorhersagen können, wo sich Hindernisse befinden werden, dies jedoch eine Art Deadlock / Livelock-Vermeidung darstellt und dies für Ihren Zweck gut genug sein kann.)
Ein Deadlock ist, wenn beide darauf warten, dass sich der andere bewegt, und keiner sich bewegt.
Ein livelock ist, wenn beide ( oder mehr) <- dies ist wichtig zu berücksichtigen) bewegen, um den anderen in die gleiche Richtung zu vermeiden, und am Ende ohne Fortschritt hin und her gehen.
Das Lösen von Livelocks kann sehr komplex werden und hängt ganz von den Kollisionsregeln und -mechanismen Ihres Spiels ab (z. B .: Sollten sie das Hindernis bekämpfen und zerstören?).
Es kommt oft vor, dass Ihre sich bewegenden Objekte Knoten- / Pfadreservierungen planen (Stornierungen nicht vergessen, wenn sie den Pfad ändern oder sterben), damit andere sich bewegende Objekte vorausplanen können.
Sobald Sie diese Informationen haben, können Sie auch das Abfangen planen.