我一直在尝试让我的控制器正常工作,但就是不行。我反复查找错误很多次,甚至重新编写了第二遍,但我就是找不到错误!这快把我逼疯了,而且我知道这很可能是一个显而易见的低级错误,但请帮帮我。

function getControls(){
    var _pad = 0

    //方向键
    key_right = keyboard_check(vk_right) || keyboard_check(ord("D")) || (_pad != -1 && (gamepad_button_check(_pad, gp_padr) || gamepad_axis_value(_pad, gp_axislh) > 0.5));
    /*限制范围*/key_right = clamp(key_right,0,1)
    key_left = keyboard_check(vk_left) || keyboard_check(ord("A")) || (_pad != -1 && (gamepad_button_check(_pad, gp_padl) || gamepad_axis_value(_pad, gp_axislh) < -0.5));
    /*限制范围*/key_left = clamp(key_left,0,1)

    //视角
    key_up = keyboard_check(vk_up) || keyboard_check(ord("W")) || (_pad != -1 && gamepad_axis_value(_pad, gp_axisrv) < -0.5);
    key_down = keyboard_check(vk_down) || keyboard_check(ord("S")) || (_pad != -1 && gamepad_axis_value(_pad, gp_axisrv) > 0.5);

    //动作
    key_jump = keyboard_check(vk_space) || (_pad != -1 && gamepad_button_check(_pad, gp_face1));
    /*限制范围*/key_jump = clamp(key_jump,0,1)
    key_jump_pressed = keyboard_check_pressed(vk_space) || (_pad != -1 && gamepad_button_check_pressed(_pad, gp_face1));
    /*限制范围*/key_jump_pressed = clamp(key_jump_pressed,0,1)
    key_atk = keyboard_check(vk_rshift) || (_pad != -1 && gamepad_button_check(_pad, gp_face3));
    key_dash = keyboard_check_pressed(ord("Q")) || keyboard_check_pressed(vk_control) || (_pad != -1 && gamepad_button_check_pressed(_pad, gp_shoulderrb));

    //跳跃按键缓冲
    if (key_jump_pressed) {
      jumpKeyBufferTimer = bufferTime
    }

    if (jumpKeyBufferTimer > 0) {
      jumpKeyBuffered = 1
      jumpKeyBufferTimer -= 1
    } else {
      jumpKeyBuffered = 0
    }


    if can_move {
        moveDir = key_right - key_left;

        xspd = moveDir * moveSpd;

        var _subPixel = 0.5;
        if (place_meeting(x + xspd, y, oWall)) {
            if (xspd != 0) {
                var _pixelCheck = _subPixel * sign(xspd);
                while (!place_meeting(x + _pixelCheck, y, oWall)) {
                    x += _pixelCheck;
                }
            }
            xspd = 0;
        }
        x += xspd;

      /////////////////////////////////////////


        // 使用缓冲跳跃检查进行跳跃
        if jumpKeyBuffered && jumpCount < jumpMax{
            jumpKeyBuffered = false;     // 跳跃成功后重置缓冲
            jumpKeyBufferTimer = 0;

    jumpCount++;

    //设置跳跃保持计时器
      jumpHoldTimer = jumpHoldFrames
        }
    //中断跳跃
    if !key_jump{jumpHoldTimer=0}
    //根据计时器/按住按键进行跳跃
    if jumpHoldTimer > 0{
    yspd = jspd
    jumpHoldTimer--
    }

       //////////////////////////////////////////////////////

        yspd += grav;

    if onGround{jumpCount = 0}

        if (yspd > termVel) { yspd = termVel; }

        // 碰撞检测
        if (place_meeting(x, y + yspd, oWall)) {
            if (yspd != 0) {
                var _pixelCheck = _subPixel * sign(yspd);
                while (!place_meeting(x, y + _pixelCheck, oWall)) {
                    y += _pixelCheck;
                }
            }
            yspd = 0;
        }

    //判断玩家是否在地面上
    if yspd >= 0 && place_meeting(x,y+1,oWall){onGround = true} else {onGround = false}

        y += yspd;

    //////////////////////////////////

        if key_atk{
          //攻击代码在此
        }
      }
    }