Deteccion de colisiones en un juego de Tiles

No se si este será el lugar indicado para el mensaje, pero bueno, seguro que alguien sabe de esto...

La cuestión es que estamos programando un juego para Linux/Windows basado en tiles y un estilo muy próximo al Zelda:Link to the past de Snes. Y aunque ya lo tenemos algo avanzado, uno de los problemas que no logramos solucionar convenientemente es el de la detección de las colisiones entre los sprites del juego. He buscado articulos y post en paginas de programacion al respecto, pero no he encontrado una verdadera solución. Tan solo algunas aproximaciones en forma de cuadrados o circulos que en distancia cortas fallan, y otras a nivel de pixel que son extremadamente lentas [decaio] Así pues, la pregunta que lanzo es la siguiente: ¿alguien sabe como codificaba ese juego en concreto (The Legend of Zelda: a Link to the past) la deteccion de colisiones? Tan solo necesito la idea, no el codigo. O si alguien ha programado alguna vez algo similar, y ha conseguido solventar el problema, sus comentarios seria gratamente considerados. [carcajad]
Sprite con Sprite:
Con programación orientada a objetos, asigna a cada entidad-sprite una caja de colisión con la que comprobar sus colisiones. Las comprobaciones las harás en la función de movimiento de dicha entidad.

Sprite con Escenario:
Asigna un color especial de pixel con el que delimitar las superficies del mapa colisionables. Luego comprueba si la caja de colisión del sprite colisiona con algún sprite de dicho color.

O más fácil aún: si tus tiles van a ser sólidos o huecos simplemente (es decir, cada tile es un bolque totalmente sólido e imposible de traspasar, o totalmente traspasable), asigna el atributo de traspasabilidad a cada tile y compruebalo antes de entrar en él.

Una vez capturadas las colisiones, el tratamiento es cosa tuya ;)

Si quieres una explicación más en profundidad, no dudes en preguntar.
Nuestro problema es solo el que tu llamas "sprite con sprite", el de iteracion del escenario ya lo resolvimos mas o menos como dices tu "en la forma facil". Pero ya probamos el metodo de asignar una caja a cada sprite, y solo funciona cuando el sprite es muy regular, ya que si por ejemplo digamos que tu sprite de heroe tiene un brazo estirado con una espada, el bloque deberia coger un area demasiado amplia y detectaria colisiones que no lo son en realidad...:-? Necesitamos algo todavia mas fino, pero que no sea demasiado costoso en cuanto a recursos. Pensamos en "rodear" cada sprite de un pixel especial, pero tenemos el problema de que si es del mismo color que el color transparente no se distingue del fondo del sprite, y si es distinto se ve sobre el mapa y no queda del todo bien...¿alguna otra propuesta... : ein?
nas

creo recordar que salio un buen programa con un monton de ejemplos que podrias utilizar y era realmente barato. se llama . div games studio y esta totalmente en español

un saludo
4 respuestas