Eu estava tentando implementar um caminho simples, mas o resultado é menos satisfatório do que o que pretendia alcançar. O problema é que unidades em jogos como Starcraft 2 se movem em todas as direções, enquanto as unidades, no meu caso, só se movem no máximo 8 direções (estilo Warcraft 1), pois essas 8 direções direcionam para os seguintes nós disponíveis (eles se movem de um bloco para o próximo bloco vizinho) . O que devo fazer para alcançar o resultado como no Starcraft 2? Encolher o tamanho do ladrilho?
Na imagem, você pode ver uma linha horizontal de ladrilhos de pedra sendo obstáculos e o caminho encontrado marcado como ladrilhos verdes. A linha vermelha é o caminho que quero alcançar.
game-design
game-mechanics
path-finding
Kooi Nam Ng
fonte
fonte
Respostas:
Para um bom algoritmo de busca de caminhos, usar A * provavelmente seria uma boa idéia, no entanto, para um jogo simples que não exige busca de caminho sofisticada, eficiente ou eficaz, basta fazer com que os personagens se movam em direção a um alvo, descobrindo a direção de o alvo deve ser suficiente.
Você pode gerar um 'gráfico de visibilidade' (que outros pontos são visíveis de cada ponto) a partir dos vértices e executar A * no gráfico. Isso funciona porque o caminho mais curto sempre estará no gráfico de visibilidade.
Encolher o tamanho do ladrilho pode ajudá-lo.
Recursos
Leitura adicional
EDIT: Eu gosto do comentário @ MarkusvonBroady.
Recursos
From @MarkusvonBroady
Eu fiz uma pesquisa, encontre os seguintes itens (esses podem ajudá-lo)
fonte
A partir de uma extremidade do caminho bruto, por exemplo
path[0]
, você pode removerpath[1]
se o segmento formado pela união dos pontospath[0]
epath[2]
NÃO cruza nenhuma parede. Ir além até o último segmento fornecerá um caminho mais simples.Isso não apenas suaviza o caminho, mas também remove alguns pontos inúteis, como exemplo de fogo, 3 segmentos consecutivos de uma linha reta.
fonte