hola tengo un juego tipo castlevania, le tengo un efecto de gravedad como cualquier juego de plataformas, cuando colisiona con un objeto solido el personaje deja de tener gravedad y puede caminar sobre ella hasta hay todo normal pero cuando colisiona horizontalmente con una pared el muñeco se traba y hasta que deje colisionarla el personaje vuelve a tener su gravedad entonces como soluciono esto gracias
Estoy seguro que el problema esta en como lo moves hacia los costados. Te doy un ejemplo que habia hecho para otra pregunta
Este es el que uso yo siempre.
Evento create
vsp = 0 //velocidad vertical
hsp = 0 // velocidad horizontal
movespeed = 6 //velocidad en la que se movera (no necesaria)
jumpspeed = 12 // velocidad en la que saltara (no necesaria)
grav = 0.5 // velocidad en la que caera (no necesaria)
Evento step
//Variables
var lkey = keyboard_check(vk_left);
var rkey = keyboard_check(vk_right);
var jkey = keyboard_check_pressed(vk_up);
//Si el jugador toca 1 pixel hacia abajo
if(place_meeting(x,y+1,obj_wall))
{
vsp = 0;//Velocidad vertical es igual a cero
if(jkey)
{
vsp = -jumpspd; // y si toca jkey seria -jumpspeed.
}
}
else
{
if(vsp < 10) // Cuando ya vsp sea menor a diez
{
vsp += grav; //Empezara a bajar
}
}
if(rkey)
{
hsp = movespd;
}
if(lkey) //Movimientos izquierda y derecha
{
hsp = -movespd;
}
if((!rkey && !lkey) || (rkey && lkey)) //Si no toco ninguna tecla o las dos
{//Velocidad hor es igual a cero.
hsp = 0;
}
//Colisiones horizontales.
if(place_meeting(x+hsp,y,obj_wall))//Si tocamos la pared a la velocidad hor
{
while(!place_meeting(x+sign(hsp),y,obj_wall))//Mientras que no toquemos
{//La pared a la velocidad hor ya sea en -1 o 1
x += sign(hsp);//Se movera un pixel en pixel
}
hsp = 0; //Hasta completar el while y que la velocidad horizontal sea cero
}
x += hsp;//Esto hace de que x siempre vaya aumentando a la velocidad de la variable
//Colisiones verticales.
if(place_meeting(x,y+vsp,obj_wall))//Lo mismo que colisiones horizontales.
{
while(!place_meeting(x,y+sign(vsp),obj_wall))
{
y += sign(vsp);
}
vsp = 0;
}
y += vsp;