跳跃角色的高度不受控制

时间:2015-02-15 23:42:33

标签: game-maker gml

我们正在尝试制作一个马里奥游戏。但是如果我们拿着向上的键,那么使用的角色就会上升。不像马里奥游戏在一定高度之后回来。我们刚刚开始学习Gml。请帮助我们。我们上传了我们为跳跃和移动制作的脚本。 hsp和vsp变量分别用于水平和垂直速度.grav用于设置重力。

{

    var hsp;
    var vsp;
    var grav;
    var grounded;
    hsp = 0;
    vsp = 0;
    grav = 5;
    grounded = 0;

    key_right = keyboard_check_direct(vk_right); 
    key_left = keyboard_check_direct(vk_left);
    key_up = keyboard_check_direct(vk_up);

    if(key_right)
    {
        if(hsp < 3)
        {
            hsp += 5;
        }
    }

    if(key_left)
    {

        if(hsp > -3)
        {
            hsp -= 5;
        }
    }
    if(key_up)
    {
        vsp = -20;

    }
    vsp += grav;

    if(place_meeting(x + hsp, y, obj_wall))
    {
        while(!place_meeting(x + sign(hsp), y, obj_wall))
        {
            x += sign(hsp);
        }
        hsp = 0;
    }

    x += hsp;

    if(place_meeting(x, y + vsp, obj_wall))
    {
        while(!place_meeting(x, y + sign(vsp), obj_wall))
        {
            y += sign(vsp);
        }
        if(sign(vsp) == 1)
        {
            grounded = 1;
        }
        vsp = 0;
    }
    else
        grounded = 0;



    y += vsp;
}

1 个答案:

答案 0 :(得分:0)

你的问题在于代码:

if(key_up)
{
    vsp = -20;

}
vsp += grav

发生的是每一步,如果按下向上键,执行脚本的对象将被移动20px。然后它将字符向下移动grav px。由于grav始终为5,因此只要按下向上键,就会产生(-20 + 5) = -15的净位移。就像你经常(只要向上按压)跳跃每一步,而不只是一次跳跃然后让重力完成它的工作。


我认为你想要的只是跳跃,如果你身下有东西(跳下去)。要做到这一点,只需添加另一个条件(检查你是否在某事物之上)到if语句,就像这样......

if ( key_up and place_meeting(x, y+1, obj_wall) )
{
    vsp = -20;

}
vsp += grav

现在,如果你站在某个东西上,你将只能跳跃,如果你在半空中,引力会让你失望。