Saludos a todos,
finalmente terminaron los exámenes, espero que esto contribuya a la resurrección de nuestro proyecto.
Ya hemos terminado el sistema de terreno, que nos permite usar cualquier tipo de cuestas, por ejemplo:

Y… bueno, hacer algo así de manera eficiente no ha sido tan fácil. Al menos idear el método. 
Pero bueno, ha sido muy divertido.
La primera idea que vino a mi mente fue dividir el terreno en triángulos, de manera de chequear una colisión con el terreno consistiría básicamente en ver si alguno de los ‘puntos clave’ de los personajes se encontraba en alguno de estos triángulos.
La triangulación quedaba así.

Sin embargo este método es pesado, no muy eficiente. Por ejemplo, en el pequeño mapa mostrado (320×240) habría unos 15 triángulos, así que nos podemos imáginar cuantos podrían haber en un nivel real del juego (1200×800?). Chequear 4 vértices del personaje (asumiendo una máscular rectangular) con 15 triángulos, cada step, no es pesado, pero hay que darse cuenta de que también hay enemigos, balas… y no eran 15 triángulos… eran muchos más… mucho chequear, ¿no?
Así que se ideó otro método, suficientemente rápido como para que el sistema de terreno no se nos convirtiera en un cuello de botella. Es un sistema bastante novedoso, que nunca había utilizado antes, pero que, en teoría, debía ser mucho más rápido y eficiente que cualquier sistema de terreno usado hasta la fecha. Y lo está demostrando.
La idea consiste, básicamente, en dividir en triángulos la parte ‘no sólida’ del terreno. Así:

Teniendo en cuenta que los vértices de los triángulos deben estar siempre en puntos sólidos.
Así, los vértices (por ejemplo, los 4 del sprite del personaje) siempre están en un triángulo en concreto.
Una breve explicación de porqué el método es muy rápido.
Digamos que tenemos un vértice en el triángulo 4, y que nos estamos moviendo hacia la derecha.
Lo que debemos hacer es, básicamente, chequear si tras el movimiento, el vértice seguiría en el mismo triángulo o en alguno de sus adyacentes.
Así, si el vértice acabaría (una vez realizado el movimiento) en el triángulo 4, o en uno de sus adyacentes (1 o 8), podemos realizar el movimiento, no hemos encontrado colisión con ningún sólido.
En la mayoría de las ocasiones, el vértice se quedará en el mismo triángulo, ¡lo que significa que sólo tuvimos que chequear un triángulo!
Recordad que eran 15 en el mini nivel ejemplo de antes!
En un peor caso (teniendo que chequear adyacentes), el resultado tampoco sería nada malo, chequearíamos 3 triángulos.
Sin embargo, si demostramos que tras el movimiento el vértice no acabaría en ninguno de los triángulos 1, 4 ni 8, tenemos que chequear algo más. Nótese que esto ocurre en contadas ocasiones.
Digamos que, en ese step, nuestro vértice pasó del triángulo 4 al 11 (que no es algo fácil, pero es posible), tendremos que hacer algo más de cálculo.
Primeramente, calculamos la intersección del vector de movimiento que parte del vértice con los lados del triángulo en que está.
En nuestro ejemplo, la colisión ocurriría con el lado que los triángulos 4 y 8 comparten.
A continuación, sustraemos al vector de movimiento el vector que va desde el vértice hasta el punto de intersección.
Establecemos el 8 como ‘triángulo actual’ de nuestro vértice, y volvemos a calcular si podemos seguir con el movimiento.
Esta vez, como 11 es un triángulo adyacente a 8, el movimiento se hace sin problemas.
Espero haberme explicado con claridad.
Ahora, un ejemplo que ilustre lo que ocurre cuando encontramos una colisión.
Digamos que estamos en el triángulo 4, y moviéndonos hacia abajo. Saldríamos de nuestro ‘triángulo actual’, y también de los adyacentes, luego tendremos que calcular la intersección del vector de movimiento con los lados del triángulo, como antes.
Pero esta vez, encontramos que el lado con el que estamos intersectando no es compartido con ningún triángulo adyacente al actual. ¿Qué significa eso? Significa que estamos colisionando con un sólido.
En esta situación, detenemos el movimiento, rebotamos, lo que sea.
Actualmente estoy trabajando en un editor de niveles, que está casi listo, para mañana podríamos tener nuevas noticias.
-Borja Moreno Fernández
P.D.: ¡Saludos a todos y buena suerte con vuestros proyectos!