3

我正在开发一个 2D 平台游戏作为学习实验,目前在跳跃逻辑方面遇到了一些问题。我知道重力应该应用到玩家身上,这会影响跳跃和下降的过程。这是我目前实现它的方式。

isJumping只是bool我用来知道玩家应该向上还是向下以及他们当前是否处于中间跳跃状态,因此他们不会再次跳跃。

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;
            }
        }
    }

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

4

2 回答 2

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;

如果您使用此代码向上拍摄一个物体,您可以获得(非常)逼真的轨迹。这是一个很好的跳跃起点。

开始跳跃的最简单方法是在按下跳跃键时增加一些向上的速度。上面的代码将使角色恢复原状。

然而值得注意的是,优秀的平台游戏采用了很多技巧来让跳跃感觉更好。尤其是跳跃的高度可以通过按下跳跃按钮的时间来调节。通过让玩家立即开始向下移动,让这种感觉反应灵敏是很重要的。一个快速的方法是将速度设置为零并在玩家向下移动时施加额外的重力。但这确实是您必须调整的。

于 2013-03-03T09:30:55.660 回答
0

您使用什么进行碰撞检测/响应?那会有点影响。但是,您至少需要速度和位置。一个例子可能是:

class Player 
{
    Vector2 Position;
    Vector2 Velocity;
}

// in the constructor:

Position = new Vector2 (YOUR POSITION HERE);
Velocity = Vector2.Zero;

然后你添加VelocityPosition每个时间步(创建一个Player.Update()方法并从你的默认Update方法中调用它)。然后当你想移动时,添加到Velocity每个时间步。例如,检测何时按下右键并添加0.5fX. Velocity对左键执行相反的操作(减去它),并修改Y向上和向下。这将产生滑动效果,就像在冰上一样。对于重力,只需在每个时间步的 Y 部分添加少量,即可使玩家“跌倒”。

为了让玩家跳跃(最简单的方法),只需将Y速度设置为-5或按下空间时设置。如前所述,由于您的“重力”,角色会向上移动,并最终跌落。

于 2013-03-03T10:01:58.253 回答