C#XNA 2D平台跳跃逻辑

Eri*_*ric 3 c# xna 2d

我正在研究2D平台游戏作为学习实验,目前在跳跃逻辑方面遇到了一些麻烦.我知道重力应该应用于玩家,这会影响跳跃和下降过程.这是我目前如何实施它.

isJumpingbool我只是想知道玩家是应该上升还是下降,以及他们目前是否处于跳跃状态,所以他们不会再跳.

spriteJumpPosition 是我用来限制玩家跳跃高度的值(默认值为0,上限为10,下面是硬编码).

void UpdateGravity()
    {
        // Check if player is currently jumping
        if (isJumping == true)
        {
            if (spriteJumpPosition < 10)
            {
                spritePosition.Y += (float)gravity;
                spriteJumpPosition += gravity;
            }
            else if ( spriteJumpPosition >= 10 )
            {
                isJumping = false;
                spritePosition.Y -= (float)gravity;
                spriteJumpPosition -= gravity;
            }
        }
        else if ( isJumping == false )
        {
            if (spriteJumpPosition > 0)
            {
                spriteJumpPosition -= (int)gravity;
                spritePosition.Y -= (float)gravity;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,当前的行为是玩家向下移动一点(可能2-3帧)然后开始上升,isJumping = false并且永远不会停止.我在这做错了什么?这只是完全错误的方法吗?

And*_*ell 12

我完全错了,我很害怕.你知道位置,速度加速度吗?

速度是一种随时间变化的位置.加速度是速度随时间的变化.重力是一种向下的加速度,因此随着它们的下降,事物会变得更快.

以下是一些可能有助于说明这一概念的代码:

Vector2 position;
Vector2 velocity;
readonly Vector2 gravity = new Vector2(0, -9.8f);

// Update:
float time = (float)GameTime.ElapsedGameTime.TotalSeconds;
velocity += gravity * time;
position += velocity * time;
Run Code Online (Sandbox Code Playgroud)

如果使用此代码向上拍摄物体,则可以获得(非常多)逼真的轨迹.这是跳跃的良好起点.

启动跳转的最简单方法是在按下跳转键时添加一些向上的速度.上面的代码将使角色退缩.

然而值得注意的是,优秀的平台游戏者采用了很多技巧来让跳跃感觉更好.最特别的是,跳跃的高度可以通过按下跳跃按钮多长来调节.通过让玩家立即开始向下移动来使这种感觉响应是很重要的.快速执行此操作的方法是将速度设置为零,并在玩家向下移动时施加额外的重力.但这确实是你必须调整的东西.