Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Colision con escenario dudas

Iniciado por Pumuki, 14 de Abril de 2009, 01:03:08 AM

« anterior - próximo »

Pumuki

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.


[EX3]

#1
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 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
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Warchief

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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.