Autor original: CRISTOPHER2545
Versión de GM utilizada: :GM8: :GMS:
Descripción: este script sirve para crear una caja que el jugador pueda empujar. el código esta optimizado para evitar bajas en la memoria.
Código:



CREATE EVENT

//movimiento
hsp = 0;
vsp = 0;

//gravedad
grav = 0.5;
m=1
//salto y movimiento
jumpspeed = 11

//friccion maxima
groundAccel = 1//puedes modificar esto para tener friccion en el piso
groundFric  =1 //puedes modificar esto para tener friccion en el piso
airAccel    = 0.4 //0.4 valores recomendados
airFric     = 0.1// valores recomendados
onGround=false
// velocidad maxima
maxH        = 5
maxV        = 0.1

jumps=0
jumpsmax=2
move_lock = false;
grounded = false;


STEP EVENT
var tempAccel, tempFric;

//Get the player's input
key_right = keyboard_check(vk_right);
key_left = keyboard_check(vk_left);
key_down = keyboard_check(vk_down);
key_jump = keyboard_check_pressed(vk_space);
key_jump_held = keyboard_check(vk_space)
//React to inputs

if (onGround) {
    tempAccel = groundAccel;
    tempFric  = groundFric;
} else {
    tempAccel = airAccel;
    tempFric  = airFric;
}

if (vsp < 10) vsp += grav;

move_lock = false;
{
// Moving right
if  place_meeting(x+2,y,obj_player)
{
    if (hsp > 0)
        hsp = Approach(hsp, 0, tempFric);   
    hsp = Approach(hsp, -maxH, tempAccel);


if  place_meeting(x-2,y,obj_player)
{
     if (hsp < 0)
        hsp = Approach(hsp, 0, tempFric);   
    hsp = Approach(hsp, maxH, tempAccel);

}

if  !place_meeting(x-1,y,obj_player) && !place_meeting(x+1,y,obj_player)
{
hsp=0
}

//Horizontal Collision
if place_meeting(x+hsp,y,obj_wall)
{
    yplus = 0;
    //subir las cuestas
    while (place_meeting(x+hsp,y-yplus,obj_wall) && yplus <= abs(1*hsp)) yplus += 1;
    if place_meeting(x+hsp,y-yplus,obj_wall)
    {
        while (!place_meeting(x+sign(hsp),y,obj_wall)) x+=sign(hsp);
        hsp = 0;
    }
    else
    {
        y -= yplus
    }
}
x += hsp;
//bajar las cuestas
if !place_meeting(x,y,obj_wall) && vsp >= 0 && place_meeting(x,y+2+abs(hsp),obj_wall)
{while(!place_meeting(x,y+1,obj_wall)) {y += 1;}}

//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;


if (!place_meeting(x,y+1,obj_wall))
{
onGround=false
}
else
{
onGround=true
airAccel    = 0.4
}




if (vsp < 0) && (!key_jump_held)
{
    vsp += grav;//+
}





Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!