Me encontré con esta pregunta cuando estaba diseñando un videojuego en C #.
Si consideramos juegos como Battlefield o Call of Duty , cientos o incluso miles de balas vuelan al mismo tiempo. Los eventos se desencadenan constantemente, y por lo que sé, esto absorbe mucha potencia de procesamiento ... ¿o no? Quiero saber cómo varios desarrolladores de juegos manejan las viñetas (2D y 3D) y cuál es el método más eficiente para cada uno.
Leí la pregunta ¿Cómo se simulan las balas en los videojuegos? pero no toca cómo funcionan las viñetas desde la perspectiva del diseño del programa.
Tenía un par de ideas, pero cada una tiene sus inconvenientes:
El método más eficiente que se me ocurrió (para juegos 2D):
Digamos que debía crear una clase llamada Bullet, y durante el tiempo que el usuario mantenga presionado un botón, cada 0.01 segundos se crearía un objeto Bullet. Esta bala tiene:
1 velocidad
2 Posición inicial de donde se está disparando
Textura de 3 sprites
4 Un efecto de golpe
Dado que la viñeta sería su propia clase, podría administrar los oyentes de dibujo, movimiento y acción.
¿No sería difícil para el procesador procesar miles de estos objetos que se instancian y luego destruyen (cuando se activa el efecto de impacto)? Espacio RAM?
Método eficiente para juegos 3D: otro pensamiento que tuve fue:
Digamos que creo una clase de arma. Esta arma tiene varias características, algunas de las cuales:
1 Detecta a dónde apunta el arma y determina si está mirando a un objetivo
2 Activa una animación del tiroteo
3 Tiene un método doDamage () que indica algo para restar salud de lo que sea que apunte el arma
4 Notifica una clase de animación de viñeta cuando se presiona el botón
Entonces podría crear una clase estática, digamos BulletAnimation, que podría recibir una notificación de dónde está el arma que la activó, dónde apunta el arma (para el destino de la bala) e información sobre un sprite y velocidad apropiados para usar para la bala . Esta clase luego dibuja sprites (tal vez en un nuevo hilo, idk) basado en ambas posiciones y el sprite deseado, para simular una bala disparada desde una pistola.
Esto último parece mucho más difícil de codificar, y ¿no se necesitaría mucha potencia de procesamiento para llamar constantemente a la estática para hacer esto por miles de balas a la vez? También sería difícil obtener actualizaciones constantes tanto en las posiciones iniciales como finales.
Mi pregunta es, ¿cuál es la forma más eficiente en que los creadores de juegos lo hacen? ¿Este método cambia de juegos 2D a 3D?
pew-pew-pew
tecnología :)