Então, eu tenho feito esse jogo java 2D de cima para baixo nesse quadro chamado Greenfoot e tenho trabalhado na IA para os caras com quem você vai lutar. Quero que eles sejam capazes de se mover pelo mundo de forma realista, para que logo percebi, entre outras coisas, que eu precisaria de algum tipo de busca de caminhos.
Eu fiz dois protótipos A *. Uma é baseada em grade e, em seguida, eu criei uma que funcione com pontos de referência. Agora, preciso descobrir uma maneira de passar de um "mapa" 2d dos obstáculos / edifícios a um gráfico de nós dos quais posso fazer um caminho. O pathfinding real parece bom, apenas minhas listas abertas e fechadas poderiam usar uma estrutura de dados mais eficiente, mas eu chegarei a isso se e quando precisar.
Pretendo usar uma malha de navegação por todas as razões descritas neste post no ai-blog.net . No entanto, o problema que enfrentei é que o que A * considera o caminho mais curto dos centros / bordas dos polígonos não é necessariamente o caminho mais curto se você viaja por qualquer parte do nó. Para ter uma idéia melhor, você pode ver a pergunta que fiz no stackoverflow .
Eu recebi uma boa resposta sobre um gráfico de visibilidade. Desde então, comprei o livro ( Geometria Computacional: Algoritmos e Aplicações ) e continuei lendo o tópico, mas ainda sou a favor de uma malha de navegação (consulte " Gerenciando a Complexidade " nas Notas sobre localização de caminhos do Amit ). (Como uma observação lateral, talvez eu possa usar o Theta * para converter vários waypoints em uma linha reta, se o primeiro e o último não forem obscurecidos. Ou sempre que eu voltar, verifique o waypoint antes da última para ver se consigo ir direto de isso para isso)
Então, basicamente, o que eu quero é uma malha de navegação em que, depois de inseri-lo em um algoritmo de funil (por exemplo, este do Digesting Duck ), obtenho o caminho mais curto verdadeiro, em vez de um que seja o caminho mais curto, seguindo apenas o nó, mas não o menor, já que você pode passar por alguns polígonos e pular nós / arestas.
Ah, e também quero saber como você sugere que você armazene as informações relativas aos polígonos. Para o exemplo de protótipo de waypoint que criei, tinha apenas cada nó como um objeto e armazenei uma lista de todos os outros nós para os quais você poderia viajar a partir desse nó, acho que isso não funcionará com polígonos? e como saber se um polígono é aberto / passável ou se é um objeto sólido? Como armazeno quais nós compõem o polígono?
Finalmente, para constar: eu quero programar isso sozinho do zero, mesmo que já haja outras soluções disponíveis e não pretendo (re) usar esse código em outra coisa que não seja este jogo, para que não importe que inevitavelmente, será de baixa qualidade.