Estoy desarrollando un pequeño motor de juego en 2D. Los personajes tienen un método de pintura que actualmente hace lo siguiente:
- Calcule la nueva posición del personaje según su velocidad, etc.
- Actualice la celda de la cuadrícula de colisión **
- Dibuja el personaje en la nueva posición
** He creado una cuadrícula de colisión para reducir el número de controles de intersección.
Ahora el algoritmo básico que he pensado para detectar la colisión es:
For Each Character
Check intersection with characters in surrounding 8 cells
Simplemente puedo colocar este código en el método de pintura. Pero aquí está el problema que anticipo.
Supongamos que dos caracteres A y B se encuentran en celdas adyacentes en la cuadrícula de colisión. Ahora, según el algoritmo anterior en la iteración del carácter A, detectará que ha chocado con B. En la iteración para el carácter B, detectará que ha chocado con A.
Pero tengo una idea de que cuando A detecta que ha chocado con B, debería informarle a B que ha chocado con A. Esto ahorraría muchas comparaciones cuando hay más de 2 actores colisionando. Pero no estoy seguro de cómo manejar esto. Creo que en lugar de que cada personaje verifique su colisión, debería verificar la colisión dentro del bucle del juego.
¿Sería correcto este enfoque? ¿Cómo has manejado este tipo de problema? Pensé en la rejilla de colisión yo mismo. ¿Hay alguna alternativa a la lógica de cuadrícula de colisión?