Anuncios

Bienvenidos sean a este post, hoy veremos las distintas opciones que tenemos disponibles para poder detectar las colisiones.

Anuncios

Este tema es muy importante debido a que es pieza fundamental para este y nuestros proximos proyectos, por eso en este post veremos algunos de los disponibles y en cuales circunstancias algunos son mas apropiados que otros pero para resumirlo se puede decir que:

Nos cubre la necesidad de saber cuando uno de los objetos toca a otro de los objetos y con este evento responder de manera correcta ya sea para anotar en el puntaje, detectar una explosion, quitar parte de la barra de energia o una vida, etc.,

El Tinchicus
Anuncios

Por este motivo deberemos tener un conocimiento de cada uno de ellos para saber aplicarlo en el momento correcto, a continuacion pasaremos a hablar sobre las distintas opciones disponibles.

Anuncios

Interseccion rectangular

Anuncios
Anuncios

Este tipo de deteccion es uno de los mas sencillos y utilizados en muchas circunstancias pero uno de los defectos mas importantes es su imprecision, para comprender como funciona debemos imaginar que dibujamos un rectangulo imaginario al cual usualmente se lo llama hitbox o rectangulo delimitador, esto alrededor de los objetos en los cuales queremos probar nuestras colisiones, esto lo haremos matematicamente para detectar las coordenadas de los rectangulos y en caso de cruzarse, bingo! tenemos una colision.

Como dijimos cuando dos hitboxes se cruzan tenemos una colision y en ciertas ocasiones esto es mas que suficiente, sumamente mas eficiente y facil de implementar pero esto lo veremos en nuestro proximo proyecto, ya que esto se puede hacer solamente con la interseccion de los ejes x e y de cada objeto, una forma practica seria implementar por ejemplo un metodo llamado getHitBox, el cual se encargara de verificar todos los ejes de dos objetos, el jugador y el enemigo, vamos a suponer que primero verifica si se superponen los dos ejes horizontales, en caso de que no coincidan no es necesario hacer mas nada, en caso de ser verdadero procedemos a chequear si ocurre lo mismo con los ejes verticales, en caso de ser cierto tenemos una colision y disparamos el evento necesario en caso contrario puede no hacer nada porque puede suceder que el enemigo este por arriba o por debajo del jugador, aunque podemos chequear los ejes como queramos pero siempre debemos hacerlo antes de declarar la colision.

Anuncios

Superposicion por radio

Al igual que el anterior tambien lo hace por medio del cruce de dos hitboxes pero en este caso como su nombre sugiere para este caso usaremos circulos, esto tiene sus ventajas y desventajas, la mas obvio es que nos sera de mas utilidad con formas mas de tipo circular pero no sera tan eficiente con formas mas alargadas, por ejemplo para nuestra pelota y bate no seria muy practico pero si lo seria para una pelota de futbol, por ejemplo, o la cabeza de un zombie que acabanos de cortar…

Anuncios

Algoritmo de cruce de numeros

Anuncios

Este metodo es matematicamente mas complicado pero es perfecto para detectar cuando un punto cruza un poligono convexo, habra un metodo que se encarga de descomponer el objeto en varias lineas rectas y chequea cada objeto para verificar si se cruzo alguna linea, se agrega el numero de cruces y el numero es impar podemos considerar que se ha producido un impacto, para este curso no tendremos un proyecto que lo aplique pero si quieren verificarlo tengo algo asi aplicado para el juego Asteroides, en este post tienen todo el curso completo para verificarlo.

Anuncios

Estas son las opciones que tendremos disponibles pero todos tienen dos problemas los cuales son:

  • Falta de precision
  • Toman muchos recursos del CPU
Anuncios
Anuncios

Obviamente para estos dos problemas, la interseccion de rectangulo y radio va a tener falta de precision porque en realidad no va a ser exacto y la segunda falla va a ser debido por lo multiples procesos que debe efectuar para verificar linea por linea para chequear si fue impactado o no, esto producira que se baje el rendimiento del CPU, dos posibles soluciones son:

  • Multiples hitboxes, como su nombre lo indica se asignan varios hitboxes para obtener una cobertura mas correcta, y con el metodo vamos verificando cada uno
  • Chequeo de vecinos, este metodo solo permite objetos que estan dentro del mismo area y con esto chequeamos que solo lo objetos que esten en la misma vecindad que solo ejecute el uso mas intenso del CPU si existe una verdadera posibilidad de colision
Anuncios

Para nuestro proyecto Pong utilizaremos el mas conveniente como es el rectangular, dado que la pelota y el bate son de este estilo, con esto establecido debemos crear uno para golpear con el bate y otro para que la pelota no salga de la pantalla, para suerte nuestra la clase RectF no solo nos permite representar nuestros elementos sino tambien a los hitboxes, para ello la clase posee el metodo intersects sino que tambien nuestros elementos se crearon con el objeto mRect de tipo RectF y ademas poseemos un metodo getmRect que nos devuelve una referencia de los mismos, solo nos falta un detalle como es agregar el sonido para nuestro contacto con la pelota pero eso sera en el proximo post.

Anuncios

En resumen, hoy hemos visto unos posibles tipos de deteccion de colisiones, los tres mas usados, hemos visto dos con los cuales mas trabajaremos, hemos visto uno que no implementaremos en este curso pero si lo usamos para otro tipo de juego (Asteroides) en otro curso que ya existe en este blog, hemos hablado de los inconvenientes que tendremos y como podemos darle una posible solucion, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00