¿Cómo implementar una escopeta en un juego?

14

Las pistolas y las ametralladoras son fáciles: puedes hacer que las balas vuelen en cierta dirección, así que ya lo implementé. Una escopeta, por otro lado, hace daño a cualquier cosa en un área determinada que se parece a un cono. ¿Cómo debo implementar eso? Tengo un par de sugerencias aquí, pero podría usar algunos consejos:

  • Divide una bala en varias pequeñas balas, que hacen menos daño por sí mismas, pero vuelan en una dirección similar (es más probable que un enemigo más cercano sea alcanzado)
  • No use balas: solo tenga un efecto de partículas de un disparo de escopeta y calcule cuánto daño reciben los enemigos en función de la posición / orientación, etc.
  • Tiene una gran bala invisible (un cubo, por ejemplo) que daña cosas, así como un efecto de partículas que hará que parezca que en realidad es un disparo de escopeta.

¡Gracias por adelantado!

Oleksiy
fuente
Esas opciones son todas válidas (aunque la primera, ¿por qué no comenzar con las múltiples balas?) Y la decisión se basa en el diseño de su juego.
congusbongus
Relacionado: La fórmula de precisión vs distancia y "cono de fuego" puede ser un buen término de búsqueda para esto.
MichaelHouse

Respuestas:

21

La mayoría de los juegos implementan escopetas como un arma que dispara múltiples proyectiles a la vez, pero cada uno con una cierta aleatorización del ángulo que dejan al actor. En la mayoría de los juegos de disparos en primera persona modernos, casi todas las armas tienen al menos un poco de propagación por cada disparo que disparan para que sean menos precisas a larga distancia, por lo que la misma implementación se puede usar para escopetas.

Implementación simple: cuando desea una extensión de 10 ° y el jugador mira en dirección 0 ° vertical y 50 ° horizontal, los proyectiles los dejarían en un ángulo entre -5 ° y + 5 ° vertical y entre 45 ° y 55 ° horizontal.

Mejor implementación: extiende los proyectiles no en un área rectangular sino en un área circular alrededor del punto de mira del jugador.

La eficiencia reducida percibida en los resultados de largo alcance de la propagación de los proyectiles significa que todos los objetivos distantes y pequeños no serán alcanzados por todos. Cuando quieras enfatizar más esto para hacer que tu escopeta sea un arma pura de corto alcance, también puedes reducir el daño de cada proyectil por cada cuadro de lógica de juego que viaja.

En los tiradores de arriba hacia abajo o de desplazamiento lateral, es menos común que se haya extendido a todas las armas porque el área de juego es demasiado pequeña para que esto tenga sentido, pero cuando quieres un arma como una escopeta, este es un asunto diferente y lo mismo Se puede utilizar la técnica, solo que no necesita preocuparse por la 3ª dimensión. Alternativamente, podría disparar los proyectiles en ángulos fijos como -6 °, -4 °, -2 °, 0 °, 2 °, 4 °, 6 °. En un contexto 2D no se verá tan artificial como en un contexto 3D y al jugador de desafío le gustará, porque reduce las posibilidades.

Philipp
fuente
La mejor implementación es igual de fácil. El primer enfoque requiere dos ángulos aleatorios (horizontal y vertical), al igual que el segundo (fuera del eje [0, + 5 °] y rotación a lo largo del eje [0, 360 °])
MSalters
@MSalters Eso no distribuye uniformemente los proyectiles en el círculo. En cambio, los concentra alrededor del eje. Este puede o no ser el efecto que uno busca. Para obtener una distribución aleatoria uniforme dentro del círculo, vea esta respuesta .
Daniel AA Pelsmaeker
@Virtlink: correcto, aunque la densidad de probabilidad uniforme dentro del círculo no es lo que yo buscaría. Una distribución normal tiende a ser la mejor para cosas de física como esta, y también es particularmente simple de hacer: simplemente difunda los valores ϑ con una distribución normal 1D, y los valores φ con la misma distribución normal escalados por ϑ. No es necesario ir a coordenadas doblemente polares.
Leftaroundabout
Aquí hay una página que trata sobre los spreads de escopeta , puede echar un vistazo y ver qué hacen.
AJMansfield