Junio 25, 2019, 01:38:53 PM Ultima modificación: Junio 26, 2019, 11:25:00 AM por Fashion_Trozos
Buenas a todos!. Estoy intentando familiarizarme con el tema de las colisiones. Estoy haciendo un plataformas básico. Las colisiones verticales funcionan perfectamente, pero las horizontales no. os pongo el código a ver si me podéis echar una mano. Un saludo

//--------------------Colisiones-----------------------------------------

//Colision vertical contra el suelo

if place_meeting(x,y+vsp,ob_suelo){

//Mientras no encontremos colision a un pixel, ajustamos de 1 en 1
while (!place_meeting(x,y+sign(vsp),ob_suelo)){
y += sign(vsp);
}
vsp = 0;
}

//Colisiones horizontales

if (place_meeting(x+hsp,y,ob_suelo)){

//Mientras no encontremos colision a un pixel, ajustamos de 1 en 1
while (!place_meeting(x+sign(hsp),y,ob_suelo)){
x += sign(hsp);
}
hsp = 0;
}

Es el mismo codigo que uso para las colisiones y me funciona, deberias subir el codigo completo, talves el problema este en otra parte.

Hola, aquí te lo paso

//-------------Detectar muerte por caida----------------------------------


if y > room_height {
room_restart()
}


//---------------------Gravedad---------------------------------------

if (vsp < 20) and !place_meeting(x,y+1,ob_suelo){
vsp += grav;
}


//-----------------------Saltos----------------------------------------

tecla_salto = mouse_check_button_pressed(mb_right)

if place_meeting(x,y+1,ob_suelo){
if tecla_salto{
saltando = true
vsp = -jumpspeed
}

}


//--------------------Colisiones-----------------------------------------

//Colision vertical contra el suelo

if place_meeting(x,y+vsp,ob_suelo){

//Mientras no encontremos colision a un pixel, ajustamos de 1 en 1
while (!place_meeting(x,y+sign(vsp),ob_suelo)){
y += sign(vsp);
}
saltando = false;
vsp = 0;
}

//Colision con saltador
if place_meeting(x,y+vsp,ob_saltador){

//Mientras no encontremos colision a un pixel, ajustamos de 1 en 1
while (!place_meeting(x,y+sign(vsp),ob_saltador)){
y += sign(vsp);
}
vsp = -50;
}

//Engancharse a los techos






//Colisiones horizontales

if (place_meeting(x+hsp,y,ob_suelo)){

//Mientras no encontremos colision a un pixel, ajustamos de 1 en 1
while (!place_meeting(x+sign(hsp),y,ob_suelo)){
x += sign(hsp);
}
hsp = 0;
}



//------------Deteccion de movimiento y velocidad-----------------------


tecla_derecha   = keyboard_check(ord("D"))
tecla_izquierda = -keyboard_check(ord("A"))
move = tecla_derecha + tecla_izquierda;
hsp = move * moovespeed;


//---------------------Sumar velocidades---------------------------------

y += vsp;
x += hsp;




//--------------------Reiniciar la room-----------------------------------

if keyboard_check_pressed(vk_enter){
room_restart()
}

if keyboard_check_pressed(vk_escape){
exit
}


Muchas gracias por responder

Ya esta!!! así como revisaba el código lo he visto! El problema es donde he colocado x += hsp. Lo he colocado después de la colisión horizontal y funciona perfectamente!