À procura de uma boa técnica para o movimento dos personagens no jogo de hack & slash

51

Estou criando um jogo de hack e slash e quero que meus personagens se movam como, por exemplo, no Torchlight, Diablo etc. etc. Atualmente, eu gero um conjunto de nós para todas as áreas que podem ser passadas de um andar. Quando clico em algum lugar, o jogador passa por um caminho interpolado de nós. Isso não parece muito natural. O jogador se move como um robô. Os inimigos também usam esse sistema de nós para movimento e compartilham o mesmo problema, mas eu tenho mais um problema com eles. Quando os inimigos detectam o jogador, eles o procuram pelo caminho mais curto. Às vezes, eles usam o mesmo caminho e se alinham ao jogador, em vez de cercá-lo. Não sei como fazer os inimigos escolherem caminhos diferentes e cercarem o jogador. Você sabe como posso resolver esses problemas? Talvez eu deva usar uma abordagem diferente para o movimento do personagem?


Minha técnica atual:

insira a descrição da imagem aqui


Captura de tela do Torchlight:insira a descrição da imagem aqui

---ATUALIZAR---

Eu quero saber como lidar com estas situações:

Situação 1, tenho obstáculos dinâmicos / estáticos a caminho

insira a descrição da imagem aqui

Situação 2, os inimigos têm o mesmo caminho para o jogador (entre na fila para lutar conosco) insira a descrição da imagem aqui

Piotrek
fonte
10
+1 para diagramas e capturas de tela (e uma boa pergunta). Sempre útil.
The Duck Comunista
Esta é uma pergunta impressionante (+1), para a qual espero que haja muita discussão e sugestão sobre diferentes maneiras de lidar com esse desafio (influências aleatórias para alterar rotas, IA, etc.).
Randolf Richardson
11
Considero uma boa prática usar um sistema de pontuação ao criar uma IA. Dependendo da pontuação de cada inimigo (tempo para alcançar o jogador, por exemplo), você pode dar a ele um comportamento específico. Por exemplo, se 8 mobs são o máximo que pode atacar o jogador, aqueles com uma pontuação maior que os oito primeiros podem tentar conscientemente encontrar um caminho mais longo para o jogador, fazendo com que pareçam mais inteligentes.
Jonathan Connell
Ainda estou procurando resposta, como posso lidar com obstáculos (dinâmico / estático) na malha de navegação? , Eu não posso usar Reformulação
piotrek

Respostas:

24

Comportamentos de direção em combinação com uma estrutura de dados de navegação .

Existem várias maneiras de fazer isso, mas esse é o conceito básico. Pode ser mais fácil usar uma malha de navegação para que você possa aplicar a busca de caminhos em cada seção convexa.

Se você é inflexível quanto à manutenção de um gráfico, pode usar o comportamento Procurar para cada nó no caminho, em vez de seguir rigidamente um caminho de nó para nó.

Outro método que você poderia empregar é o Path Smoothing, mas lembre-se de que isso é bastante computacionalmente caro.

Espero que ajude.

EDITAR:

Para ajudar com seus problemas de prevenção de obstáculos, use algum tipo de prevenção de obstáculos .

Ray Dey
fonte
Thx for answer, você sabe como posso gerar malha de navegação? Ou existe outra maneira de fazê-lo? Meu mapa é criado com pedaços de piso sem costura (quads / triângulos).
Piotrek
11
Você sempre pode usar a reformulação ( code.google.com/p/recastnavigation ) para gerar uma malha de navegação. Você só precisa dar uma "sopa triangular" (um monte de polígonos) e ela será gerada para você.
Ray Dey
Eu sou o único que encontrou isso, mas o link: ai-blog.net/archives/000152.html está morto. Na verdade, não consigo acessar www.ai-blog.net
123iamking 30/10
3

Se você preferir ficar com um nodegraph, em vez de mudar para uma malha de navegação, como outros sugeriram, poderá resolver o problema de "alinhar com o jogador em vez de cercá-lo", designando cada inimigo para atacar a partir de uma direção específica.

Existem muitas maneiras de conseguir isso, mas eu geralmente uso um sistema de 'token' para atribuir direções únicas aos monstros, onde o objeto do jogador possui um token para cada direção (norte, nordeste, leste, etc.). Quando um inimigo quer traçar o caminho para o jogador, ele deve primeiro adquirir uma ficha dele. A direção especificada pelo token diz ao monstro para qual lado do jogador ele pode encontrar o caminho. Como o jogador possui apenas um token para cada direção, e os monstros precisam de um token antes de poderem atacar, vários monstros nem todos tentarão encontrar o mesmo lado do jogador, o que deve interromper um pouco o caminho.

Além disso, você também pode aplicar uma pequena penalidade aos nós durante o processo de encontrar caminhos, para incentivar os monstros a se aproximarem de uma direção que corresponda ao token que eles possuem. (Ou seja, se um monstro tiver o token que permite atacar a partir do leste, com o objetivo de determinar o "caminho mais curto" para esse monstro, trate os nós do caminho ao norte / oeste / sul do jogador como se eles são vários nós, em vez de apenas um). Isso fará com que os monstros se separem mais rapidamente e tente flanquear o jogador, em vez de marchar até o jogador em fila única e se espalhar apenas na última etapa.

Trevor Powell
fonte
2

Basicamente, para os inimigos, o que você quer fazer é encontrar o caminho no nível macro (pense em gerar áreas convexas e percorrer a área em que o jogador se encontra) e adote alguns comportamentos de direção no estilo micro no nível micro (quando estiver perto para o jogador).

Aqui está um exemplo de comportamento boid: http://www.red3d.com/cwr/boids/

Para o jogador, acho que a luz das tochas faz uma busca em uma malha de navegação para onde você clica / arrasta, e isso funciona muito bem. Pode parecer um pouco mais desconectado do que o controle direto, mas leva a melhores resultados para o jogador.

Tetrad
fonte
Mas, o que, por exemplo, com escadas? O inimigo também pode me atacar lá, fazer outra malha de navegação?
Piotrek
Ele deve fazer parte da malha nav, sendo sua própria forma convexa.
Tetrad 31/05
11
Como alternativa, você pode continuar usando o seu ponto para apontar pontos e recorrer a comportamentos de direção baseados em física quando se aproximar.
Tetrad 31/05
Como posso lidar com obstáculos dinâmicos em malhas de navegação?
Piotrek
11
Aqui está uma postagem de blog sobre como a reformulação está trabalhando para lidar com isso: digestingduck.blogspot.com/2011/03/… .
Tétrada
1

existe um algoritmo chamado rrt que é usado para o problema de busca de caminhos no mundo real. a superfície em que seu herói (ou inimigos) pode caminhar é uma entrada, juntamente com a superfície em que os objetos podem se mover e, usando algum algoritmo de otimização, ele encontra um caminho para o seu destino. Por mais que eu saiba, esse algoritmo é muito usado nas ligas robocup. é rápido, encontra o caminho mais curto e evita colisões e curvas fechadas. você pode usar este powerpoint show para ter uma idéia de como ele gera o caminho.

Ali1S232
fonte
após uma análise mais detalhada, parece que a apresentação que forneci conta o que o rrt faz e também sugere uma nova abordagem, que alega funcionar melhor em alguns casos, e ele sugeriu que o algoritmo para busca de caminhos para jogos RTS espero que ajude você.
Jun1
0

Para tornar as rotas de localização de caminhos mais "realistas", sugiro que você verifique o artigo sobre A * de aparência natural em Game Programming Gems Vol.1

freud
fonte