Buenas a todos,
Tengo un grave problema con las plataformas móviles. Cuando tengo mi personaje sobre la plataforma móvil y esta cambia de dirección el personaje se desplaza según la velocidad de la plataforma hacia la dirección contraria e incluso llega a caer de la plataforma. Esto me pasa incluso cuando le añado un "path" a la plataforma.
Llevo varios días intentando solucionar este problema y he consultado el foro pero no he encontrado ninguna solución definitiva y estoy desesperado. Estaría verdaderamente agradecido si alguien pudiese ayudarme con este problema.
Os adjunto el código que he obtenido de un ejemplo en internet:
Create jugador
///Initialize Variables
grav = 0.2;
hsp = 0;
hsp_carry = 0;
vsp = 0;
movespeed = 4;
jumpspeed_normal = 7;
jumpspeed = jumpspeed_normal;
key_down = 0;
Step jugador
//Get the player's input
key_right = keyboard_check (vk_right);
key_left = -keyboard_check (vk_left);
key_jump = keyboard_check_pressed (vk_space);
key_down = keyboard_check (vk_down);
//React to inpuls
move= key_left + key_right;
hsp = move * movespeed;
if (vsp < 10) vsp += grav;
if (place_meeting (x,y + 1, obj_wall))
{
if (key_jump) vsp = -jumpspeed;
}
var hsp_final = hsp + hsp_carry;
hsp_carry = 0;
//Horizontal Collision
if (place_meeting(x+hsp_final,y, obj_wall))
{
while(!place_meeting(x+sign(hsp_final), y, obj_wall))
{
x += sign (hsp_final);
}
hsp_final = 0;
hsp = 0;
}
x += hsp_final;
//Vertical Collision
if (place_meeting(x,y+vsp, obj_wall))
{
while(!place_meeting(x, y+sign (vsp), obj_wall))
{
y += sign (vsp);
}
vsp = 0;
}
y += vsp;
Create plataforma móvil
sprite_index = -1;
///Initialize Variables
dir = -1;
movespeed = 3;
hsp = 0;
Step plataforma móvil
mask_index = spr_platform;
hsp = dir * movespeed;
//Horizontal Collision
if (place_meeting (x+hsp, y, obj_wall))
{
while(!place_meeting(x + sign(hsp), y, obj_wall))
{
x += sign (hsp);
}
hsp = 0;
dir *= -1;
}
x += hsp;
if (instance_exists (obj_player))
{
if (round(obj_player.y + (obj_player.sprite_height/2)) > y) || (obj_player.key_down) mask_index = -1;
else
{
mask_index = spr_platform;
}
if place_meeting (x, y - 1, obj_player)
{
obj_player.hsp_carry = hsp;
}
}
Draw plataforma móvil
draw_sprite(spr_moveplatform,0,x,y);
Gracias por vuestra atención.
P.D. Tengo intención de no utilizar físicas en el juego.