Pues yo entendi que el detector de colisiones es el que hace el ciclo con todos los objetos en pantalla.
Pero se podria generalizar a un detector de colisiones que sirviera incluso para juegos 3d, haciendo el proceso preliminar para determinar si dos sprites estan lo suficientemente cerca como para colisionar. Luego pasariamos a un proceso más fino y especifico de colisiones 3d o deteccion de colision por pixeles.
Este proceso preliminar tendria mucha importancia para ganar en eficiencia, para no tener que usar los procesos mas detallados y pesados con todos los objetos.
Y el problema principal es que detectar colisiones "todos contra todos" es un algoritmo cuyo consumo de CPU se incrementa geométricamente al incrementar el numero de sprites en el juego.
------- Al grano: (Es complicado pero creo que seria mas eficiente)
La idea es evitar hacer el test de colision básico con todos los objetos, solo con aquellos suficientemente cerca para tener chances.
Por ejemplo tener dividido toda la zona del juego en varias areas, no demasiado grandes que contengan demasiados sprites ni tan pequeñas que haya que actualizar frecuentemente las listas de sprites por zonas. Cada zona tendria una lista dinámica de sprites. Al moverse un sprite a otra zona tendriamos que moverlo a la lista de esa zona.
Para detectar colisiones solo tendriamos que revisar entre los sprites de la zona actual y si esta muy cerca de otra u otras zonas, lo suficiente para hacer colision, revisar tambien en esas listas.
Si por ejemplo tenemos 1000 sprites en todo el mapa de juego, pero en nuestra zona sólo tenemos a 3 sprites ganamos muchisimo al evitar comprobar colisiones con los otros 997. Y asi reducimos el tiempo de CPU necesario para calcular si podemos mover o no a nuestro sprite, claro que existe algo extra de consumo de CPU para revisar si hemos pasado a otra zona y en ese caso modificar las listas, pero esto solo lo hacemos una vez por sprite. Asi que el tiempo de CPU no se incrementa geometricamente como seria el caso de aumentar mas sprites a nuestro juego y seguir con el proceso de revisar todos contra todos.
Pero esto no solo se queda en colisiones, tambien sirve para determinar los sprites suficientemente cerca para ser por ejemplo atacados, potenciales enemigos, para envio de mensajes entre sprites que colaboran entre si, o para saber cuales sprites estan suficientemente cerca de la zona que tenemos que dibujar para mostrarlos en pantalla.