Game maker 跳转缓冲区不能很好地处理变量跳转

Game maker 跳转缓冲区不能很好地处理变量跳转,game-maker,gml,game-maker-language,Game Maker,Gml,Game Maker Language,我遇到了一个问题,因为我的缓冲区,我的玩家对象在跳跃时总是跳到最大高度。这是我的第一个游戏,所以我在玩Heartbeast的引擎。我想我错过了一些很明显的事情,希望你们能帮我 以下是我在跳转动作脚本中使用的内容: ///启用移动跳跃(高度、输入、释放输入) /* 调用此脚本以启用平台跳转 在运动实体上。 */ 变量高度=参数[0];//跳跃高度(应为正) 变量输入=参数[1];//跳跃的输入 var release_input=参数[2];//跳跃高度控制输入(释放) 变异郊狼框架=10;//

我遇到了一个问题,因为我的缓冲区,我的玩家对象在跳跃时总是跳到最大高度。这是我的第一个游戏,所以我在玩Heartbeast的引擎。我想我错过了一些很明显的事情,希望你们能帮我

以下是我在跳转动作脚本中使用的内容:


///启用移动跳跃(高度、输入、释放输入)
/*
调用此脚本以启用平台跳转
在运动实体上。
*/
变量高度=参数[0];//跳跃高度(应为正)
变量输入=参数[1];//跳跃的输入
var release_input=参数[2];//跳跃高度控制输入(释放)
变异郊狼框架=10;//郊狼时间的宽限期,以帧为单位
var jumpBufferFrames=10;//跳转缓冲区的缓冲区(以帧为单位)
//检查地面碰撞情况
if(place_meeting(x,y+1,碰撞_对象)| | place_meeting(xprevious,yprevious+1,碰撞_对象)){
郊狼定时器=0;//重置郊狼定时器
if((输入)| |(jumpBufferTimer如果(释放输入和&vsp[0]当你触地时,你重置了
coyoteTimer
,但是你将
jumpBufferTimer
置于不同的条件下,也许在相同的条件下这些应该设置为0?

我想这与释放输入没有被触发有关?
///enable_movement_jump(height, input, release_input)
/*
    Call this script to enable platform jumping
    on a movement entity.
*/

var height = argument[0]; // The jump height (Should be positive)
var input = argument[1]; // The input for jumping
var release_input = argument[2]; // The input for jump height control (release)
var coyoteFrames = 10; // The grace period, in frames, for coyote time
var jumpBufferFrames = 10; // The buffer, in frames, for the jump buffer

// Check for ground collision
if (place_meeting(x, y+1, collision_object) || place_meeting(xprevious, yprevious+1, collision_object)) {
    coyoteTimer = 0; // Reset coyote timer
    if ((input) || (jumpBufferTimer < jumpBufferFrames))
    {
        vsp[0] = -height;
        coyoteTimer = coyoteFrames; // Max coyote timer
        jumpBufferTimer = jumpBufferFrames; // Max buffer timer
    }

} else {
    if (input)
    {
        jumpBufferTimer = 0; // Reset buffer timer
        if (coyoteTimer < coyoteFrames) // During coyote time
        {
            vsp[0] = -height;
            coyoteTimer = coyoteFrames; // Max coyote timer
            jumpBufferTimer = jumpBufferFrames; // Max buffer timer
        }
    }
    if (release_input && vsp[0] <= -height/3) {
        vsp[0] = -height/3;
    }
}

++coyoteTimer; // Increase coyote
++jumpBufferTimer; // Increase buffer