Atualmente, estou trabalhando em A * pathfinding em uma grade e estou procurando suavizar o caminho gerado, considerando também a extensão do personagem se movendo ao longo dele. Estou usando uma grade para encontrar o caminho, no entanto, o movimento do personagem é de roaming gratuito, não o movimento estrito de ladrilhos para ladrilhos.
Para obter um caminho mais suave e eficiente, estou traçando linhas em uma grade para determinar se há peças imersas entre peças para raspar cantos desnecessários.
No entanto, como um rastreamento de linha é de extensão zero, ele não considera a extensão do caractere e produz resultados ruins (não retornando blocos não-passíveis de passagem perdidos pela linha, causando colisões indesejadas).
Então, o que estou procurando é, em vez de um algoritmo de linha que determina os blocos embaixo dele, estou procurando um que determine os blocos sob uma linha de extensão de bloco inteiro. Aqui está uma imagem para ajudar a visualizar o meu problema!
Alguém tem alguma idéia? Eu tenho trabalhado com a linha de Bresenham e outras alternativas, mas ainda não descobri como resolver esse problema específico.
fonte
Respostas:
Que tal se você desenhar uma linha de todos os cantos do 'bloco' em que está localizado em todos os cantos do bloco que deseja ir. Você provavelmente pode até otimizar isso para 3 linhas em vez de quatro. Isso não detectaria corretamente todos os blocos no caminho?
Quanto a caminhos mais suaves, consulte artigos sobre o 'comportamento da direção', especialmente aqueles que o combinam com A *, por exemplo, nos seguintes links:
fonte
Acabei de implementar esse algoritmo para um jogo meu alguns dias atrás! (-8
Aqui está a minha ideia em forma de imagem:
Observe que o algoritmo trabalha com retângulos de qualquer tamanho. baseia-se no fato de que um canto do retângulo sempre colide primeiro com qualquer linha de grade. Isso significa que você só pode rastrear um raio e obter todas as interseções necessárias.
Aqui está o algoritmo passo a passo:
Existem alguns casos extremos aqui, como quando o raio é exatamente vertical / horizontal ou quando atinge um canto exatamente, mas não é difícil.
fonte
Este procedimento é uma adaptação de bresenham, que resolve a questão original.
fonte