Eu tenho um inimigo chefe que procura o jogador usando o algoritmo A *. É um ambiente bastante complexo, e estou fazendo isso no Flash, para que a pesquisa possa ficar um pouco lenta ao pesquisar por longas distâncias. Se o player estivesse parado, eu poderia procurar apenas uma vez, mas no momento estou pesquisando todos os quadros. Isso leva tempo suficiente para que minha taxa de quadros esteja sofrendo.
Qual é a solução usual para isso? Existe uma maneira de "replanejar" A * sem refazer toda a pesquisa? Devo procurar um pouco menos frequentemente (a cada meio segundo ou segundo) e aceitar que haverá um pouco de imprecisão no caminho?
fonte
Você pode usar a detecção de proximidade para executar o algoritmo a cada poucos quadros, se a distância for muito grande (porque na maioria dos casos, se a distância for grande, o caminho de destino não mudará drasticamente de quadro para quadro). Por exemplo:
Isso pressupõe que exista uma distância em que a execução de A * em cada quadro tenha desempenho ainda aceitável. Em suma, eu iria para a sua segunda opção. Especialmente se o que você tem está funcionando, eu evitaria reimplementar outra coisa se eu pudesse reduzir o que está funcionando bem. A linha inferior é que você terá que experimentar para ver se funciona para o seu jogo.
fonte
Não estou realmente respondendo sua pergunta exata, mas ... se você estiver disposto a "trapacear", você pode fazer o jogador deixar "migalhas de pão" e fazer com que o chefe as siga. Se o caminho da trilha de trilha se cruzar, siga o mais recente (isso faz com que o chefe evite loops e outros caminhos que podem ser muito longos, para não mencionar não seguir o caminho exato do jogador)
Isso funcionaria bem se o chefe fosse algum tipo de animal com um bom senso de olfato. Isso funcionaria muito como seguir o cheiro do jogador :)
fonte
Seu caso é basicamente o que o HPA * foi inventado para resolver. Se parecer um exagero, no entanto, eu tenderia a pensar que a busca de caminhos a cada meio segundo deveria funcionar muito bem.
fonte
Se for um ambiente estático, você poderá pré-calcular o caminho mais curto de todos os pares.
fonte
Eu criei um jogo para uma competição de 48 jogos em que um personagem A * segue o jogador em um nível. Como minha implementação A * era lenta (não era possível executar todos os quadros), coloquei o intervalo em um atraso de três segundos. Isso teve o resultado não intencional de permitir ao jogador "enganar" a IA por alguns instantes. Na verdade, tornou o jogo mais divertido.
Posteriormente, aprimorei o desempenho da implementação A * e tentei executá-la em todos os quadros. O jogo deixou de ser divertido porque o inimigo sempre buscava perfeitamente o jogador.
Isso foi inesperado e uma boa experiência de aprendizado.
fonte
A menos que você queira (ou precise) usar A *, você também pode dar uma olhada nos comportamentos de direção . Como não há planejamento de caminho completo por quadro envolvido, deve ser muito mais leve no processamento.
fonte