Quindi ho realizzato questo gioco java 2D top down in questo framework chiamato Greenfoot e ho lavorato sull'intelligenza artificiale per i ragazzi che combatterai. Voglio che siano in grado di muoversi realisticamente in tutto il mondo, così presto ho capito, tra un paio di altre cose, avrei bisogno di un qualche tipo di tracciamento.
Ho realizzato due prototipi A *. Uno è basato sulla griglia e poi ne ho creato uno che funziona waypoint, quindi ora ho bisogno di trovare un modo per passare da una "mappa" 2D degli ostacoli / edifici a un grafico di nodi da cui posso tracciare un percorso. L'individuazione del percorso reale sembra soddisfacente, solo i miei elenchi aperti e chiusi potrebbero utilizzare una struttura di dati più efficiente, ma ci arriverò se e quando ne avrò bisogno.
Intendo utilizzare una mesh di navigazione per tutte le ragioni delineate in questo post su ai-blog.net . Tuttavia, il problema che ho affrontato è che quello che A * pensa sia il percorso più breve dai centri / spigoli poligonali non è necessariamente il percorso più breve se viaggi attraverso qualsiasi parte del nodo. Per avere un'idea migliore puoi vedere la domanda che ho posto su StackOverflow .
Ho una buona risposta riguardo un grafico di visibilità. Da allora ho acquistato il libro ( Geometria computazionale: algoritmi e applicazioni ) e ho approfondito l'argomento, tuttavia sono ancora a favore di una rete di navigazione (vedi " Gestione della complessità " dalle Note di Amit sulla ricerca di percorsi ). (Come nota a margine, forse potrei usare Theta * per convertire più waypoint in una linea retta se il primo e l'ultimo non sono oscurati. O ogni volta che torno indietro, controlla il waypoint prima dell'ultimo per vedere se posso andare direttamente da che a questo)
Quindi sostanzialmente quello che voglio è una mesh di navigazione in cui una volta che l'ho passato attraverso un algoritmo a imbuto (ad esempio questo da Digesting Duck ) otterrò il vero percorso più breve, piuttosto che uno che è il percorso più breve che segue solo nodo a nodo, ma non il più breve dato che puoi passare attraverso alcuni poligoni e saltare nodi / spigoli.
Oh, e voglio anche sapere come suggerisci di memorizzare le informazioni relative ai poligoni. Per l'esempio del prototipo di waypoint che ho fatto, avevo solo ciascun nodo come oggetto e memorizzavo un elenco di tutti gli altri nodi che potevi raggiungere da quel nodo, immagino che non funzionerà con i poligoni? e come posso sapere se un poligono è aperto / attraversabile o se è un oggetto solido? Come posso memorizzare i nodi che compongono il poligono?
Infine, per la cronaca: voglio programmarlo da solo anche se ci sono già altre soluzioni disponibili e non ho intenzione di (ri) utilizzare questo codice in qualcosa di diverso da questo gioco, quindi non importa che sarà inevitabilmente di scarsa qualità.