Resulta que hay veces en las que cuando mi personaje está cayendo y colisiona con el suelo se queda "flotando" un pixel más arriba, lo que hace que el bloque que se supone que debería caer cuando es pisado no caiga, aunque no es muy usual estaría bueno arreglarlo, si me pudiesen ayudar lo agradecería.
Código de gravedad:
if !place_meeting(x,y+1,objColision) and (numVSP < 20)
{
numVSP += numGrav
}
Código de colisión vertical:
if place_meeting(x,y+numVSP,objColision)
{
while !(place_meeting(x,y+sign(numVSP),objColision))
{
y += sign(numVSP)
}
numVSP = 0
}
if place_meeting(x,y+numVSP,objBloqueCaida)
{
while !(place_meeting(x,y+sign(numVSP),objBloqueCaida))
{
y += sign(numVSP)
}
numVSP = 0
}
Vídeo del error:
https://www.youtube.com/watch?v=5mVqTnW1LnU
Desde ya GRACIAS!
Veo un tanto extraño tu código de movimiento vertical. Tal vez lo pusiste incompleto, porque no hay un código que haga caer al personaje cuando no se ejecuta la primera condición. Intenta arreglarlo así:
[gml]
if(place_meeting(x, y+numVSP, objColision))
{
while(!place_meeting(x, y+sign(numVSP), objColision))
{
y += sign(numVSP);
}
numVSP = 0;
}
else y += numVSP; //Esto es lo que le faltaba
numVSP += numGrav; //No necesitas comprobar antes de acelerar, de todas formas la velocidad se cancela cuando se toca el suelo.
[/gml]
Creo que así debería funcionar.