ricerca del percorso con ostacoli in un gioco simile a Warcraft 3


10

Considera A * la ricerca su una mappa basata su tessere. Un codice semplice sarebbe: Se all'interno di quella cella è presente un'unità, allora non è raggiungibile, va bene.

Ma c'è un problema di risoluzione della mappa. Quando guardo Warcraft 3, i mostri e le strutture hanno un raggio diverso e puoi camminare molto vicino, che è più simile al vettore, come è stato implementato?

Inoltre, qual è la soluzione standard per incorporare il rilevamento delle collisioni di ostacoli in movimento con l'algoritmo di ricerca del percorso, come Warcraft 3?


Cosa significa "vettoriale"?
jcora,

Risposte:


7

Non posso dire con certezza quale tipo di approccio sia stato utilizzato dagli sviluppatori WC3, ma assomiglia molto a Hierarchical Annotated A *. Il raggio unitario definito in WC3Editor è stato usato così com'è per il ridimensionamento del modello 3d, ma le dimensioni effettive dell'unità per l'individuazione del percorso erano discrete, forse qualcosa come unitSize = (int) (unitRadius / 10). Non era basato su vettori, questo è certo.

Diciamo che ci sono molti nodi di percorso che creano una griglia di nodi ad alta risoluzione. Un'unità semplice come un ghoul ha una dimensione di 2, quindi per posizionarla da qualche parte in una griglia abbiamo bisogno di 4 nodi di percorso liberi l'uno vicino all'altro. Un eroe del cavaliere della morte è leggermente più grande con una dimensione di 3, prendendo in totale 9 nodi percorso. Adesso mettiamo insieme 2 ziggurat lasciando uno spazio di 2 nodi nel mezzo e inviamo un ghoul e un cavaliere della morte dall'altra parte. Ghoul sarà in grado di passare tra due ziggurat, mentre il cavaliere della morte dovrà muoversi. Come può essere determinato?

Per vedere se un nodo può ospitare un'unità di dimensioni specifiche, assegniamo un valore di spazio speciale a ciascun nodo definendo una dimensione massima consentita dell'unità. Fondamentalmente, significa che sono stati effettuati diversi controlli di delimitazione per un nodo e i limiti più grandi possibili sono stati ricordati come spazio del nodo. Quindi, quando vogliamo posizionare un cavaliere della morte su un nodo, diventa semplice come confrontare la distanza tra i nodi e le dimensioni del cavaliere della morte. Certo, le cose diventeranno molto più complesse quando ci sono diverse unità che saltellano in competizione per i nodi, ma questa è un'altra storia.

Per ulteriori dettagli potresti consultare questo articolo:

http://harablog.wordpress.com/2009/01/29/clearance-based-pathfinding/


4

Utilizzerebbe la tassellatura per creare mesh di navigazione AKA delle regioni di tracciamento. Questo articolo spiega il concetto con diagrammi completi.

È ancora possibile mantenere A * come approccio per l'individuazione del percorso, tuttavia la rete non è più una griglia (grafico a 4 connessioni), ma un grafico che rappresenta la connettività arbitraria tra le regioni poligonali. Quindi dovrai adattare il tuo algoritmo per adattarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.