【问题标题】:Jumping Height of character is not controlled人物跳跃高度不受控制
【发布时间】:2015-02-15 23:42:32
【问题描述】:

我们正在尝试制作马里奥游戏。但是,如果我们按住向上键,使用的角色会向上和向上。不像马里奥游戏中它在一定高度后返回。我们刚刚开始学习 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;
}

【问题讨论】:

    标签: game-maker gml


    【解决方案1】:

    你的问题出在代码上:

    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
    

    现在,你只有站在某物上才能跳跃,如果你在半空中,重力会把你拉下来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      相关资源
      最近更新 更多