Cómo detectar una colisión entre un sprite y una forma generada por el usuario de algún tipo.
Por ejemplo. Hay algunos objetos en la pantalla. El usuario toma su dedo y dibuja una forma circular alrededor de un objeto (la regla de selección es pintar un círculo alrededor del sprite, pero las formas de pintura pueden ser diferentes). Necesito detectar qué objeto seleccionado, que al igual que:
collision-detection
Huwell
fuente
fuente
Respuestas:
Si la forma se dibuja principalmente con segmentos de línea del usuario (o curvas de Bezier con puntos de control), puede implementar un algoritmo bastante utilizado conocido como Teorema del eje de separación . En pocas palabras: si hay un eje (unidad-vector que representa una dirección) en el que las formas no se superponen (sus valores proyectados no resultan en una diferencia positiva), los objetos no se superponen. He usado esto en el pasado y ha funcionado a las mil maravillas.
fuente
Si la forma se dibuja a mano, como en Crayon Physics , puede mantener una serie de líneas rectas y verificar las colisiones con cada una de ellas. A pesar de las líneas rectas, puedes usar curvas de Bezier o algo así.
fuente
Los enfoques dependen de las estructuras de datos que elija, ya sean mapas de bits o vectores.
El primer enfoque puede manejar formas complejas arbitrarias, es simple de implementar pero usa más memoria. En realidad, puede reducir la sobrecarga de memoria mediante la compresión y acelerarla mediante el uso de estructuras de datos jerárquicos (octrees) ...
El segundo enfoque, no es tan simple de implementar, pero utiliza más potencia de procesamiento.
En cada caso, mida si es importante. Intentaría hacer el primero porque es más sencillo de implementar. Buena suerte. :)
fuente