1 de julio de 2015

Colisiones 2D (2/2)

Ya vimos como determinar colisiones entre 2 rectángulos. Ahora veamos como podemos aplicarlo en los videojuegos. Lo primero que tenemos que entender es que el área o caja de colisión (hitboxes en inglés), si bien está referida a las coordenadas del sprite, no tiene porque tener sus mismas dimensiones.
La imagen anterior corresponde a la página 48 del documento de diseño del videojuego Downtown Nekketsu Koushinkyoku Soreyuke Daiundoukai donde nos muestra las hitboxes de Kunio. Si bien no podemos contar con los documentos de diseño de todos los videojuegos, hoy en día existen herramientas que nos permiten visualizar las hitboxes de algunos.
Veamos un ejemplo simple:
En Super Mario Bros, podemos notar que las hitboxes, como ya mencionamos, no tienen el mismo tamaño del sprite, e incluso en algunos casos hasta exceden del mismo. ¿Por qué? Bueno, la razón es simple: para mejorar la jugabilidad. En la imagen notamos que la hitbox de Mario se excede en la parte baja. Esto se debe a que el principal ataque de Mario es saltar encima del enemigo, y si para esto contamos con un margen de error, nos resultará más fácil ejecutar dicha acción.
Veamos otro ejemplo:
En Final Fight utilizan 2 hitboxes por personaje: una para el área de vulnerabilidad (color azul) y otra para el área de ataque (color rojo).
Observamos que el área de ataque de algunos personajes está a la altura de las piernas. ¿Por qué? Para que sea más fácil contrarrestarlos con un ataque aéreo. También notamos que los personajes que se levantan luego de ser derribados, no cuentan con área de vulnerabilidad, lo que les permite reincorporarse sin problemas.
Por otro lado, aquellos enemigos que atacan barriéndose cuentan con un área de vulnerabilidad que está por encima del cuerpo. ¿Por qué? También, para poder contrarrestar mejor su ataque con una acción aérea. Notamos además, que los objetos que contienen ítems, como los barriles, cuentan con su propia área de vulnerabilidad.

Un ejemplo más complejo es el de Street Fighter 2. Es un videojuego bastante exitoso, y parte de su éxito se debe a la variedad y precisión con la que conectamos los golpes. Analicemos un ejemplo típico: Blanka caminando por debajo de los Tatsumakis de Ryu y Ken. ¿Cómo es posible?
5 hitboxes: presión (color verde), vulnerabilidad en la cabeza (color azul), vulnerabilidad en el cuerpo (color azul), vulnerabilidad en piernas (color azul) y área de ataque (color rojo). Habría una 6ta para los agarres, pero no la vamos a tomar en cuenta en esta ocasión.
Las áreas de vulnerabilidad y ataque están claras, pero ¿el área de presión? Las hitboxes de presión son aquellas que impiden que un personaje ocupe la posición del otro, dando la sensación de que ocupan un espacio físico en el juego. En la imagen notamos como las hitboxes de vulnerabilidad de Blanka están por debajo del ataque de Ken. En la serie The King of Fighters utilizan un método similar, pero en vez de 3 hitboxes de vulnerabilidad utilizan solo 2. Además, utilizan otro tipo de hitboxes: las de neutralización de proyectiles (color amarillo). En la siguiente imagen podemos ver el alcance del Kohoken de Takuma en The King of Fighters 2002, el cual no tiene un proyectil visible, así como sus demás hitboxes.
Ahora bien, ¿qué sucede si nuestro sprite es demasiado grande e irregular? Lo mejor es utilizar cuantas hitboxes sean necesarias, dividiendo el sprite por secciones y así lograr una mayor precisión.
Notamos como en el juego The Punisher, el enemigo de la imagen cuenta con varias hitboxes, logrando una buena precisión en las conexiones de golpes. Analizar estos ejemplos nos ayudan a determinar la forma en que podemos realizar las colisiones de nuestros proyectos.