Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Pumuki en 14 de Abril de 2009, 01:03:08 AM

Título: Colision con escenario dudas
Publicado por: Pumuki en 14 de Abril de 2009, 01:03:08 AM
Buenas. Tengo un muñecajo moviendose por el escenario y me dispongo a  crearme un algoritmo para detectar las colisiones. Habia pensado en hacer un array bidimensional de 32x 32 y rellenar los lugares donde quiero que colisione tal y como veis en la foto de abajo(corresponde a los cuadrados verdes). Cual os parece el mejor sistema para detectar la colision, ¿hacer que el personaje sea un rectangulo y ver si colisiona con cada cuadrado de la cuadricula? ¿Seria mejor hacer que cuando toque el color verde haya la colision comprobando el color de los pixeles? ¿Este ultimo mas o menos como seria?

A ver si alguien me puede dar un consejo para este caso. Utilizo sdl y C.

(http://img6.imageshack.us/img6/1087/cuadricula.th.jpg) (http://img6.imageshack.us/my.php?image=cuadricula.jpg)
Título: Re: Colision con escenario dudas
Publicado por: [EX3] en 14 de Abril de 2009, 02:20:59 AM
Te seria mejor y mas optimo utilizar simples cajas y calcular su interseccion que calcular colisiones a nivel de pixel. Es un proceso mas rapido y sencillo y hara que ocupes menos memoria que si usaras un mapa de durezas para detectar colisiones por pixel. Simplemente, definirias las areas rectangulares mediante cajas por tile o bien cajas agrupando varios tiles, en caso de ser posible (asi reducirias el numero de comprobaciones a realizar).

Asi de primeras, googleando he encontrado en un foro (http://www.gp32spain.com/foros/showpost.php?p=167947&postcount=4) referencias a una sencilla libreria para detectar colisiones en SDL, tanto a nivel de pixel como por interseccion de cajas: http://en.wikipedia.org/wiki/SDL_Collide . Echa un vistazo a ver si te es de utilidad.

Salu2...

P.D.: Veo que el enlace al proyecto en sourceforge no muestra la pagina. Te paso el enlace al archivo de cabecera que parece tener todo lo necesario (dicho enlace lo encontraras en el foro que mencionaba antes): http://www.angelfire.com/vamp/genjix/sdl_lib/SDL_Collide.h
Título: Re: Colision con escenario dudas
Publicado por: Warchief en 14 de Abril de 2009, 03:39:36 AM
bool colisiones[32][32];

bool HayColision( int xNueva, int yNueva )
{
   if ( FueraMapa( xNueva, yNueva ) )
   {
      return true;
   }

  return colisiones[ xNueva ] [ yNueva ];
}

Cuando quieras mover, preguntas por la casilla destino.
No importa que el movimiento no sea de 1 casilla por frame. Si no puedes avanzar a la siguiente casilla, simplemente no muevas al player (si tiene la animación de andar dará el pego de colisión).

Para un RPG 2D va sobrado.