Recomendaciones de detección de colisión

Actualmente estoy desarrollando un juego prototipo para dispositivos mobilees en el que el usuario verá varios objects en la pantalla y tendrá que tocarlos uno por uno en el order correcto para ganar. Supongo que puedes decir que es similar a un juego de Whack a Mole, pero en vez de tener topos apareciendo en la pantalla, tendré varios objects moviéndose.

Tengo algunas dificultades para implementar un algorithm de detección de colisiones para este juego, por lo que me gustaría que nos recomendara cuál es el mejor método para usar.

Por ejemplo, supongamos que un object se mueve en una dirección dada, entonces podría usar el SAT para verificar si colisiona con otros objects. Si colisiona, se detendrá y se moverá en otra dirección que se elige random.

Otra opción sería dividir mi pantalla en cuadros cuadrados o hexagonales. De esta forma, podría verificar si las tejas están libres u ocupadas antes de mover los objects.

Mi juego es 2D y usaré una proyección ortográfica de arriba hacia abajo y lo estoy desarrollando usando Cocos2d-X y Marmalade SDK. No estoy usando ningún motor de física, porque mi juego no los requiere (los objects solo tienen que moverse, no rebotan ni necesitan ningún tipo de comportamiento físico).

La detección de colisiones en time real en un juego tiene dos etapas: la fase amplia y la fase estrecha :

En la fase amplia, usted decide qué pares de objects pueden colisionar. Si tiene un número bajo de objects (y supongo que lo tiene, ya que todos aparecerán en la pantalla), puede verificar cada object con cualquier otro object. Tenga en count que la complejidad será O (n * n), pero esto es razonable para algo por debajo de 50 objects y no es complicado en absoluto. Si realmente desea optimizarlo, debe utilizar una estructura de datos diferente, como un tree cuádruple.

En la fase estrecha, usted decide si un par de objects está colisionando. Esta fase depende en gran medida de la forma de tus objects. Puede encerrar cada object en un volumen delimitador , que se aproximará a la geometry del object. Esto hará el trabajo si la detección de colisión no tiene que ser muy precisa. Uno de los volúmenes límite más triviales es la esfera y el control de colisión es solo el valor boolean de ( Distance( sphere1.center, sphere2.center ) < sphere1.radius + sphere2.radius ) .

Usted decide qué pares se verificarán para colisión en la fase amplia y luego los verifica en la fase estrecha. Si la fase angosta dice que están colisionando, debes resolver la colisión, lo que significa cambiar la dirección en la que se mueve el object.