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
STEP EVENT
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
Código [Seleccionar]
//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
Código [Seleccionar]
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;//+
}