Gracias por tu ayuda
ya me ha salido aunque tiene un pequeño inconveniente
Bueno el codigo de como me ha quedado es este
bool animacion::colision(animacion col, int dir,int vel)
{
///mira si la proxima posicion colisiona
int x2, y2;
SDL_Rect reflejo;
reflejo=rect;
x2 = col.getx();
y2 = col.gety();
if(dir==0) reflejo.x+=vel;//derecha
if(dir==1) reflejo.x-=vel;//iz
if(dir==2) reflejo.y-=vel;//ar
if(dir==3) reflejo.y+=vel;//abajo
return( ((reflejo.x+TILESIZE_X)>x2) and
((reflejo.y+TILESIZE_Y)>y2) and
((x2+TILESIZE_X)>reflejo.x)and
((y2+TILESIZE_Y)>reflejo.y) );
}
////////////
No se me habia ocurrido mirar si colisionaba antes de mover xD gracias por iluminarme jeje
El caso esque tiene una pequeña secuela que ami personalmente me complica el codigo y quizas tu lo veas con una perpectiva quedando un codigo mejor.
Esta funcion ya va genial pero pongamos que mi personaje corre 6 pixels por movimiento
ok perfecto
pero si por algun caso esa velocidad augmenta a por ejemplo haciendolo exagerado 20
entonces detecta la colision antes de que realmente se produzca.
Yo queria implementar algo de por ejemplo
existe colision? si, ok que distancia estas con la colision? en 18 posiciones en vez de 20? ok pues avanza 17 posiciones.
Para que poniendo la velocidad que quiera siempre exista un realismo de colision.
Para esto tengo esta funcion
int animacion::distancia(animacion col)
{
//derecha
int distancia=col.getx()-(rect.x+CHARSIZE_X);
cout<<"obj "<<col.getx()<<" yo "<<(rect.x+CHARSIZE_X)<<" = "<<col.getx()-(rect.x+CHARSIZE_X)<<endl;
return col.getx()-(rect.x+CHARSIZE_X);
}
Echa solo para derecha pero seria hacerla con un if y hacerlo para todas las direcciones...
Y luego en el loop que miro la colision hacer:
if(!yo.colision(obj,0,yo.getvel()))mapa.movlateral(yo.getvel());
else mapa.movlateral(yo.distancia(obj));
Esto funciona, y tu ayuda me a servido mucho..te pongo esto en el comentario por si conoces alguna manera mas elegante de hacerla sino dejare esta y ya esta
