Como lidar com a localização e o movimento de entidades em um grande mundo em rede?

12

insira a descrição da imagem aquiConsiderando a imagem acima com blocos divididos em caixas de 32x32, eu tenho uma entidade que está marcada para 'agredir' jogadores próximos que se aproximam dela. Eu gostaria que esse monstro perseguisse o jogador idealmente (e continuasse perseguindo o jogador por um tempo). Atualmente, meu único movimento é feito, um interpolador simples para entidades remotas e isso funciona porque as lacunas entre as atualizações de movimento são bastante pequenas.

Não posso dizer com sucesso ao cliente que o monstro quer passar para a posição em que está, pois isso fará com que a entidade se mova muito mais rápido do que deveria (isso provavelmente pode ser resolvido com o uso de matemática para a interpolação). -eficiente), mas o mais importante é que não parece realista e pode cortar paredes! Eu não quero simular todo o movimento no servidor, se puder ser evitado ... embora eu ache que sim, mas isso ainda não resolveria o problema do recorte. Suspeito que a solução envolva encontrar o caminho e enviar atualizações periódicas do nó do cliente e deixá-lo simular o movimento, mas não tenho certeza.

Obrigado!

Vaughan Hilts
fonte

Respostas:

9

Para um começo simples, você pode implementar comportamentos de direção . Busque comportamentos especificamente . insira a descrição da imagem aqui

Além de procurar os personagens, deve-se evitar os obstáculos .

insira a descrição da imagem aqui

Depois de ter esses aspectos funcionando, você poderá implementar alguns seguidores mais inteligentes. Isso incluiria a localização de caminhos. Agora, em vez de se dirigirem para seus inimigos, os inimigos vão se dirigir para cada nó no caminho que os leva ao alvo.

Quando o inimigo chegar "perto o suficiente", você poderá mudar para comportamentos totalmente direcionadores. Como são mais baratos que a localização de caminhos, você obterá bons resultados a curta distância.

A direção também permitirá que você defina as velocidades máximas e as velocidades máximas dos inimigos.

A direção pode ser gerenciada no cliente com atualizações periódicas do servidor para garantir que eles ainda estejam no caminho certo.

MichaelHouse
fonte
Isso significaria simular o comportamento da direção no servidor também ou posso 'encaixar' logicamente a entidade ao longo do caminho? Eu não preciso de uma precissão enorme.
Vaughan Hilts
Somente a direção teria que ser simulada (embora não seja muito pesada). No entanto, o direcionamento para os waypoints pode ser atualizado sem simulação. Simplesmente certifique-se de que o cliente esteja dentro do alcance do waypoint "atual" e direcione-o para o waypoint correto como o "próximo". Isso envolveria alguns ajustes se a entidade estivesse fora dos trilhos e atualizada de repente.
Michaelhouse
+1 para uma ótima resposta. Obrigado por salvar minhas várias horas.
Md Mahbubur Rahman
1

Não posso dizer com sucesso ao cliente que o monstro quer passar para a posição em que está, pois isso fará com que a entidade se mova muito mais rápido do que deveria (isso provavelmente pode ser resolvido com o uso de matemática para a interpolação). -eficiente)

Na verdade, isso é simples de fazer. A direção do movimento será a posição alvo menos a posição atual. Tudo o que você precisa fazer é escalar esse vetor para a velocidade de movimento que você realmente deseja. Repita todos os quadros.

mas o mais importante é que não parece realista e pode cortar paredes! Não quero simular todo o movimento no servidor, se puder ser evitado ...

Você precisa simular o movimento no servidor. De que outra forma você saberá que todos os jogadores estão tendo o mesmo comportamento?

Você precisará de algumas informações básicas sobre o caminho. A * é o padrão. Você pode calcular um caminho para o destino e, em seguida, segui-lo é simplesmente o caso de definir vetores de movimento como acima. (Ou você pode usar comportamentos de direção como na resposta do Byte56, que é essencialmente a mesma coisa com alguns extras).

Kylotan
fonte