Hola Luis En! Creo que podés intentar esto:
//Colision horizontal
if (place_meeting(x+hspeed,y,obj_hitbox)){
while (!place_meeting(x+sign(hspeed),y,obj_hitbox)) {x += sign(hspeed);}
hspeed = 0;
}
//Colision vertical
if (place_meeting(x,y+vspeed,obj_hitbox)){
while (!place_meeting(x,y+sign(vspeed),obj_hitbox)) {y += sign(vspeed);}
vspeed = 0;
}
Analizando el código (hortizontal):
if (place_meeting(x+hspeed,y,obj_hitbox))
Esto detecta si en x + la velocidad horizontal hay un obj_hitbox. Entonces:
while (!place_meeting(x+sign(hspeed),y,obj_hitbox)) {x += sign(hspeed);}
Mientras no esté tocando al objeto en x + sign(hspeed) [Lo que hace sign es tomar un número, en este caso hspeed, y devolver su signo. Si hspeed es -3, entonces devuelve -1.], entonces a x le añade 1 en la dirección del hspeed. Luego:
hspeed = 0;
Cambia la velocidad horizontal a 0.
Sucede lo mismo en la vspeed.
Este código tiene un error en las colisiones diagonales, pero siempre fue el que yo usé.
Espero que te sirva!
//Colision horizontal
if (place_meeting(x+hspeed,y,obj_hitbox)){
while (!place_meeting(x+sign(hspeed),y,obj_hitbox)) {x += sign(hspeed);}
hspeed = 0;
}
//Colision vertical
if (place_meeting(x,y+vspeed,obj_hitbox)){
while (!place_meeting(x,y+sign(vspeed),obj_hitbox)) {y += sign(vspeed);}
vspeed = 0;
}
Analizando el código (hortizontal):
if (place_meeting(x+hspeed,y,obj_hitbox))
Esto detecta si en x + la velocidad horizontal hay un obj_hitbox. Entonces:
while (!place_meeting(x+sign(hspeed),y,obj_hitbox)) {x += sign(hspeed);}
Mientras no esté tocando al objeto en x + sign(hspeed) [Lo que hace sign es tomar un número, en este caso hspeed, y devolver su signo. Si hspeed es -3, entonces devuelve -1.], entonces a x le añade 1 en la dirección del hspeed. Luego:
hspeed = 0;
Cambia la velocidad horizontal a 0.
Sucede lo mismo en la vspeed.
Este código tiene un error en las colisiones diagonales, pero siempre fue el que yo usé.
Espero que te sirva!