Hola! Tengo unas plataformas que se mueven verticalmente, primero ascienden y una vez que tocan el techo descienden, y a la inversa si el personaje esta sobre ellas. Logré que el personaje se mueva sobre la plataforma sin problema pero sucede que si la plataforma esta bajando con el personaje encima, cuando comienza a ascender nuevamente, el personaje baja un pixel y queda estancado en la plataforma.
El código de la plataforma en el evento step es el siguiente:
[gml]
if (place_meeting(x, y - 1, obj_player)) && vsp == 0 {
phase = 1;
}
if (place_meeting(x, y - 1, obj_spike)) {
phase = 2;
}
if (phase == 1) {
vsp = -2;
}
if (phase == 2) {
vsp = 1;
}
if (place_meeting(x, y - 1, obj_player))
obj_player.y += vsp;
if (vsp > 0) && (y >= ystart) {
vsp = 0;
y = ystart;
}
//Colisiones
scr_collisions();
[/gml]
El código de las colisiones es el siguiente:
[gml]//Colisiones horizontales
if (hsp != 0) {
if (place_meeting(x + hsp, y, obj_solid)) {
while (!place_meeting(x + sign(hsp), y, obj_solid))
x += sign(hsp);
hsp = 0;
}
}
x += hsp;
//Colisiones verticales
if (vsp != 0) {
if (place_meeting(x, y + vsp, obj_solid)) {
while (!place_meeting(x, y + sign(vsp), obj_solid))
y += sign(vsp);
vsp = 0;
}
}
y += vsp;[/gml]
Ya intente poniendo el código en "end step event", usando bbox_top, etc. sin resultados positivos
puedes hacer que si la plataforma detecte si el jugador está "atascado" mandar un pixel arriba al objeto del jugador