Como implementar uma espingarda em um jogo?

14

Pistolas e metralhadoras são fáceis - você pode simplesmente ter balas voando em uma determinada direção, então eu já implementei isso. Uma espingarda, por outro lado, causa dano a qualquer coisa em uma determinada área que se parece com um cone. Como devo implementar isso? Tenho algumas sugestões aqui, mas posso usar alguns conselhos:

  • Divida uma bala em várias pequenas balas, que causam menos danos por si mesmas, mas voam em uma direção semelhante (é mais provável que um inimigo mais próximo seja atingido)
  • Não use balas - basta ter um efeito de partícula de uma espingarda e calcular quanto dano os inimigos recebem com base na posição / orientação, etc.
  • Tenha uma grande bala invisível (um cubo, por exemplo) que danifique as coisas, bem como um efeito de partícula que fará com que pareça uma bala de espingarda.

Desde já, obrigado!

Oleksiy
fonte
Essas opções são todas válidas (embora a primeira, por que não começar apenas com vários marcadores?) E a decisão é baseada no seu design de jogo.
congusbongus
Relacionado: fórmula precisão x distância e "cone de fogo" pode ser um bom termo de pesquisa para isso.
MichaelHouse

Respostas:

21

A maioria dos jogos implementa espingardas como uma arma que dispara vários projéteis ao mesmo tempo, mas cada um com uma certa aleatorização do ângulo que eles deixam para o ator. Na maioria dos atiradores em primeira pessoa modernos, quase todas as armas têm uma certa extensão para cada tiro que eles disparam, para torná-los menos precisos a longo alcance, de modo que a mesma implementação pode ser usada para espingardas.

Implementação simples: quando você deseja um spread de 10 ° e o jogador olha na direção 0 ° vertical e 50 ° horizontal, os projéteis os deixariam em um ângulo entre -5 ° e + 5 ° vertical e entre 45 ° e 55 ° horizontal.

Melhor implementação: Espalhe os projéteis não em uma área retangular, mas em uma área circular ao redor da mira do jogador.

A eficiência reduzida percebida em longo alcance resulta da propagação dos projéteis, o que significa que alvos distantes e pequenos não serão atingidos por todos eles. Quando você gostaria de enfatizar ainda mais isso para tornar sua espingarda uma arma pura de curto alcance, você também pode reduzir o dano de cada projétil para cada quadro de lógica de jogo que ele percorrer.

Nos atiradores de cima para baixo ou com rolagem lateral, é menos comum se espalhar por todas as armas, porque a área de jogo é muito pequena para que isso faça sentido, mas quando você quer uma arma como uma espingarda, isso é uma questão diferente e a mesma coisa técnica pode ser usada, apenas para que você não precise se preocupar com a terceira dimensão. Como alternativa, você pode disparar os projéteis em ângulos fixos, como -6 °, -4 °, -2 °, 0 °, 2 °, 4 °, 6 °. Em um contexto 2D, ele não parecerá tão artificial quanto em um contexto 3D e o jogador de desafios gostará, porque reduz o acaso.

Philipp
fonte
A melhor implementação é igualmente fácil. A primeira abordagem requer dois ângulos aleatórios (horizontal e vertical), assim como a segunda (fora do eixo [0, + 5 °] e rotação ao longo do eixo [0, 360 °])
MSalters
@MSalters Isso não distribui uniformemente os projéteis no círculo. Em vez disso, concentra-os em torno do eixo. Este pode ou não ser o efeito que se está buscando. Para obter uma distribuição aleatória uniforme dentro do círculo, consulte esta resposta .
Daniel AA Pelsmaeker
@Virtlink: certo, embora a densidade de probabilidade uniforme dentro do círculo não seja o que eu procuraria. Uma distribuição normal tende a ser melhor para coisas de física como essa, e também é particularmente simples de fazer: basta espalhar os valores with com uma distribuição normal 1D e os valores with com a mesma distribuição normal escalada por ϑ. Não há necessidade de ir para coordenadas duplamente polares.
usar o seguinte comando
Aqui está uma página discutindo a espingarda , você pode dar uma olhada e ver o que eles fazem.
AJMansfield