iPhone

Programación para Videojuegos: Colisiones [NB Original]

Mortal Kombat X Ray – (c) WB Games

En el mundo real todos los objetos reaccionan e interactúan entre si; ya sea al contacto o por medio de otras fuerzas: chocan, se deslizan, rebotan, se rompen, se adhieren y muchos otros comportamientos se presentan a cada interacción. Los videojuegos con la necesidad de mostrar comportamientos similares a los vistos en el mundo real utilizan diferentes tipos de métodos para emular o copiar estas conductas. En este post daremos una pequeña descripción de cómo se puede resolver esto y los principios que se utilizan para abordar esta problemática. Desde un principio debemos ser claros y mencionar que aquellas clases de Física I servirán mucho para entender algunos algoritmos y sus aplicaciones. También debo mencionar que no abordaremos el tema de una manera muy profunda ya que con cada tecnología, llámese lenguaje o engine, la manera de solucionar el comportamiento de los objetos en colisión es muy diferente, pero en todo momento sigue los mismos principios.

Antes de entrar en detalle, un punto impórtate es diferenciar entre los objetos en los cuales la física actúa sobre ellos, los objetos para los cuáles la física es intrascendente y tienen un comportamiento determinado  y aquellos que tienen un mezcla de ambos o una física específica para su comportamiento. Es importante tomar esto en cuenta, ya que entre más física se necesite para describir el comportamiento de un objeto, más poder de procesamiento será necesario.  Piensen en alguno de sus videojuegos preferidos y se darán cuenta que hay objetos con los cuales el jugador nunca tendrá interacción (fondos, GUI, objetos decorativos, etc.) otros con los cuales interactúan en todo momento, etc.

Dentro de los videojuegos se necesita tener uno o varios métodos para saber cuando ocurre el choque o interacción entre dos objetos con realidad física. Aquí analizaremos un método muy  sencillo que depende del cuadrado natural que rodea a cualquier imagen en 2 dimensiones, comúnmente llamado “Bounding Box”. Llamemos a este método, colisión rectangular.

(c) Alebrije Estudios

Colisión Rectangular.

Para este método se necesita conocer en todo momento la posición de los objetos y el ancho y alto de los mismos. Teniendo estos puntos podemos imaginar cómo se ve este cuadrado que rodea a la imagen. Qué pasaría si giramos la imagen y qué pasaría si nuestra referencia es una imagen rotada desde un inicio. Veámoslo en la imagen anterior.  Como pueden ver, es simplemente el cuadro o rectángulo que rodea a la imagen.

La manera más sencilla para determinar si dos objetos se tocan, es si estos dos cuadrados definidos con posición y ancho lo hacen. Hay dos condiciones que tienen que cumplirse para definir una colisión. Sieguiendo el siguiente diagrama (muy sencillo)

Diagramita

  1. La distancia “a” es menor o igual a la suma de la mitad de la  anchura (paralelo al eje X) de ambos objetos. ( En este caso particular la suma de estas cantidades es igual al acho total de uno de los objetos)
  2. La distancia “b” es menor o igual a la suma de la mitad de la altura (paralelo al eje Y) de ambos objetos.( En este caso particular la suma de estas cantidades es igual a la altura total de uno de los objetos)

Parece bastante sencillo, pero el tener el registro de estas distancias en tiempo real puede ser algo muy complicado en un juego con muchos elementos en pantalla.

Este método es la base para muchos otros que se han generado y parten de tener conocimiento claro de la geometría y la posición. En su mayoría los engines se especializan en tener herramientas que faciliten al desarrollador crear geometrías complejas con propiedad físicas realistas incluyendo en gran medida las colisiones. Estos “Bounding Boxes” se convierten en los conocidos polígonos de colisión. A continuación vemos hasta que punto con algún engine podemos llegar a definir una geometría específica. Los pequeños puntos representan los vertices del polígono de colisiones.

(c) Alebrije Estudios Finalmente como les comenté, estos métodos evolucionan y van tomando más variables físicas que los vuelven muy complejos. Les dejo aquí un video de un motor de Impactos que seguramente lo veran proximamente.

Tags

Lo Último


Te recomendamos